以兆字节为单位获取物理内存使用量

时间:2012-11-19 12:12:30

标签: c# memory monitoring

我正在寻找获取MB中使用的当前数量的物理内存。类似于任务管理器

enter image description here

我目前正在使用PerformanceCounter("Memory", "Available MBytes", true);但它还包括页面文件(我相信),这不是我想要的。此外,我想要获得使用而不是可用内存的选项。

我正在处理的应用程序将监视物理内存使用情况,直到达到所需的阈值。然后它将重启几个Windows服务。

如果你好奇我为什么要开发这样的程序。我们的一些程序在服务器上有内存泄漏,我们必须重新启动Windows服务以释放内存,直到我们解决所有内存泄漏,我正在使这个应用程序帮助保持服务器的运行和响应。

3 个答案:

答案 0 :(得分:5)

使用PerformanceCounter class,您可以获得 PF使用详细信息:

PerformanceCounter pageCounter = new PerformanceCounter
            ("Paging File", "% Usage", "_Total", machineName);

您可以在此处找到所有类别信息,Process Object

已添加,您还可以使用PerformanceCounter获取可用内存详细信息:

PerformanceCounter ramCounter = PerformanceCounter
            ("Memory", "Available MBytes", String.Empty, machineName);

使用PerformanceCounterNextValue()方法,您可以在MB中获取可用内存值,稍后您可以将其与阈值进行比较值以停止所需的 Windows服务

if (ramCounter.NextValue() > thresholdValue)
{
    // ... Stop Desired Services
}

参考:A Simple Performance Counter Application

答案 1 :(得分:2)

如果你不介意调用内核函数。执行此操作的c ++代码是:

 MEMORYSTATUSEX statex;
 statex.dwLength = sizeof (statex);
 GlobalMemoryStatusEx (&statex);

在codeproject上,您可以了解如何从c#:

调用内核函数

http://www.codeproject.com/Articles/1285/Calling-API-functions-using-C

答案 2 :(得分:1)

我个人会通过P / Invoke使用Win32 API GlobalMemoryStatusEx调用。

您可以在此处找到更多详细信息: - http://www.pinvoke.net/default.aspx/kernel32.globalmemorystatusex