簡體   English   中英

如何獲取C#中的總物理內存?

[英]How can I get the total physical memory in C#?

我正在使用GlobalMemoryStatusEx函數檢索有關內存的信息,但是此函數無法正常工作。 對於所有屬性,它返回0。 我認為此功能不適用於Windows 7環境。

    [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;
    }

誰能告訴我錯誤代碼在哪里出了錯?

我從以下位置發現了我的錯誤: 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);

它可以正常工作。 戰車

怎么樣:

My.Computer.Info.TotalPhysicalMemory
My.Computer.Info.AvailablePhysicalMemory

如果使用c#,則可以:

引用Microsoft.VisualBasic程序集。 然后導入Microsoft.VisualBasic.Devices命名空間。
最后使用ComputerInfo獲取總物理內存。

int bytesPerMebibyte = (1 << 20);  // http://physics.nist.gov/cuu/Units/binary.html
ComputerInfo myCompInfo = new ComputerInfo();
string physicalMemory = "Physical Memory: "
    + (myCompInfo.TotalPhysicalMemory / bytesPerMebibyte) + " MB";

您可以使用以下模板:

long memory = Process.GetCurrentProcess().PeakVirtualMemorySize64;

另一個名為Peak * 64的屬性

您在調用GlobalMemoryStatusEx之前忘記設置statEX.dwLength

MEMORYSTATUSEX statEX = new MEMORYSTATUSEX();
statEX.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
GlobalMemoryStatusEx(ref statEX);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM