如何获得可用系统内存的大小?

Lou*_*hys 45 .net c# memory diagnostics

是否有可能在C#.NET中获得系统可用内存的大小?如果有,怎么样?

Han*_*ant 56

使用Microsoft.VisualBasic.Devices.ComputerInfo.TotalPhysicalMemory.

右键单击项目,添加引用,选择Microsoft.VisualBasic.

  • @JeffreyKevinPry - 这并不意味着你在做VB.NET或其他什么.它只是另一个有用的框架库,在这种情况下已经包含了适合使用的功能.它没有穿越任何C#纯粹主义路线; 它只是充分发挥了.NET的潜力. (31认同)
  • 它是一个.NET框架类,自2.0以来的任何版本都可用.命名空间名称无关紧要. (7认同)
  • 这是一个糟糕的解决方案... :(不应该为此添加对VB的引用... (7认同)
  • 如果您不喜欢使用VB包装器,可以使用它使用的相同本机方法:http://pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html (6认同)
  • 我使用 C# 和 .NET 4.5.2:`new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory` (2认同)

Lou*_*hys 26

这个答案是基于Hans Passant的.实际所需的属性是AvailablePhysicalMemory.它(和TotalPhysicalMemory等)是实例变量,所以它应该是

new ComputerInfo().AvailablePhysicalMemory
Run Code Online (Sandbox Code Playgroud)

它适用于C#,但我想知道为什么这个页面说C#,"不支持这种语言,或者没有代码示例可用."

  • 不 - 因为它是Visual Basic中使用的`My`命名空间的一部分!不是C# - 包括这个Visual Basic dll将暴露这些在VB.NET中非常好的快捷方式; 在VB之后进入C#的人开始错过了.不错的答案+1 (2认同)

The*_*uin 19

用Google搜索'c#系统内存'后的EggHeadCafe

您需要添加对System.Management的引用

using System;
using System.Management;

namespace MemInfo
{
    class Program
    {       
        static void Main(string[] args)
        {
            ObjectQuery winQuery = new ObjectQuery("SELECT * FROM Win32_LogicalMemoryConfiguration");

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(winQuery);

            foreach (ManagementObject item in searcher.Get())
            {
                Console.WriteLine("Total Space = " + item["TotalPageFileSpace"]);
                Console.WriteLine("Total Physical Memory = " + item["TotalPhysicalMemory"]);
                Console.WriteLine("Total Virtual Memory = " + item["TotalVirtualMemory"]);
                Console.WriteLine("Available Virtual Memory = " + item["AvailableVirtualMemory"]);
            }
            Console.Read();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

总空间= 4033036

总物理内存= 2095172

总虚拟内存= 1933904

可用虚拟内存= 116280

  • 从Vista开始,Win32_LogicalMemoryConfiguration不可用.替换为CIM_OperatingSystem并使用TotalVisibleMemorySize,TotalVirtualMemorySize等.上面的代码在Win7上引发了异常,也可能在Vista上引发异常. (25认同)
  • 继@ Canacourse的评论之后,请参阅:http://msdn.microsoft.com/en-us/library/aa387937(v = vs.85).aspx以获取有关CIM_OperatingSystem类的信息. (3认同)

vik*_*ian 9

var performance = new System.Diagnostics.PerformanceCounter("Memory", "Available MBytes");
var memory = performance.NextValue();
Run Code Online (Sandbox Code Playgroud)