本文介绍了我怎样才能获得在C#中的总物理内存?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是 GlobalMemoryStatusEx
函数来检索有关内存的信息,但是这个功能不能正常工作。它的所有属性返回0。我不认为在我的Windows 7环境下此功能。
I am using the GlobalMemoryStatusEx
function to retrieve information about memory, but this function doesn't work correctly. It returns 0 for all properties. I don't think this function works in my Windows 7 environment.
[StructLayout(LayoutKind.Sequential)]
internal struct MEMORYSTATUSEX
{
internal uint dwLength;
internal uint dwMemoryLoad;
internal ulong ullTotalPhys;
internal ulong ullAvailPhys;
internal ulong ullTotalPageFile;
internal ulong ullAvailPageFile;
internal ulong ullTotalVirtual;
internal ulong ullAvailVirtual;
internal ulong ullAvailExtendedVirtual;
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
private void btnGlobalMemoryStatusEX_Click(object sender, EventArgs e)
{
MEMORYSTATUSEX statEX = new MEMORYSTATUSEX();
GlobalMemoryStatusEx(ref statEX);
double d = (double)statEX.ullTotalPhys;
}
谁能告诉我在哪里出了毛病,错误的代码?
Can anybody tell me where I went wrong with wrong code?
推荐答案
我发现我的错误来源:
的
I find my mistake from:http://www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html
我换
internal static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
要
static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
和修改
GlobalMemoryStatusEx(ref statEX);
要
GlobalMemoryStatusEx(statEX);
这正常工作。
罐
It work correctly.Tanks
这篇关于我怎样才能获得在C#中的总物理内存?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!