当前位置:编程学习 > C#/ASP.NET >>

C#怎么获得内存物理内存?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
//加入这个命名空间,用于调用系统的DLL
namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
       public  struct MEMORYSTATUS1 //这个结构用于获得系统信息
        {
            internal uint dwLength;
            internal uint dwMemoryLoad;
            internal uint dwTotalPhys;
            internal uint dwAvailPhys;
            internal uint dwTotalPageFile;
            internal uint dwAvailPageFile;
            internal uint dwTotalVirtual;
            internal uint dwAvailVirtual;
        }
        [DllImport("kernel32.dll ")]//调用系统DLL
        public static extern void GlobalMemoryStatus(ref   MEMORYSTATUS1 lpBuffer); //获得系统DLL里的函数
        public Form1()
        {
            InitializeComponent();
        }

private void button5_Click(object sender, EventArgs e)//这个是触发事件的按纽
        {

MEMORYSTATUS1 vBuffer = new MEMORYSTATUS1();//实例化结构
            GlobalMemoryStatus(ref   vBuffer);//给此结构赋值
            string useinfo=Convert.ToString(vBuffer.dwAvailPhys);//获得已用内存量
            string allinfo=Convert.ToString(vBuffer.dwTotalPhys);//获得内存总量
            MessageBox.Show(useinfo + ":" + allinfo);
//显示已用内存量:总内存量
        }
    }
}

按照这个方法取出了:2110246912,这是什么? --------------------编程问答-------------------- 你不是自己写了吗?已用内存量,2110246912是内存总量。 --------------------编程问答--------------------
引用 1 楼 guwei4037 的回复:
你不是自己写了吗?已用内存量,2110246912是内存总量。

不是,是别人写的 --------------------编程问答-------------------- 不需要,用WMI就可以获取。 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
不需要,用WMI就可以获取。

WMI? --------------------编程问答--------------------

[StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct MEMORYSTATUSEX1 //这个结构用于获得系统信息
        {
            public uint dwLength;
            public uint dwMemoryLoad;
            public ulong ullTotalPhys;
            public ulong ullAvailPhys;
            public ulong ullTotalPageFile;
            public ulong ullAvailPageFile;
            public ulong ullTotalVirtual;
            public ulong ullAvailVirtual;
            public ulong ullAvailExtendedVirtual;
        }
        [DllImport("kernel32.dll ")]//调用系统DLL
        public static extern void GlobalMemoryStatusEx(MEMORYSTATUSEX1* lpBuffer); //获得系统DLL里的函数


        static void TestMemeory()
        {
            MEMORYSTATUSEX1 ms;// = new MEMORYSTATUS1()
            ms.dwLength = 64;
            GlobalMemoryStatusEx(&ms);
            Console.WriteLine(ms.ullTotalPhys);

        }
--------------------编程问答--------------------
引用 4 楼 u010147020 的回复:
Quote: 引用 3 楼 caozhy 的回复:

不需要,用WMI就可以获取。

WMI?

其实就是wmic,自己了解一下吧,.net有封装这个东西 --------------------编程问答--------------------    你这个api调用是对的。useinfo是可用物理内存的大小,allinfo是总的物理内存有多少。

   都是以字节为单位进行标记的。可以用。 --------------------编程问答--------------------
引用 4 楼 u010147020 的回复:
Quote: 引用 3 楼 caozhy 的回复:

不需要,用WMI就可以获取。

WMI?

WMI !
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,