本文介绍了我怎样才能获得在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#中的总物理内存?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 19:26
查看更多