我正在寻找获取MB中使用的当前数量的物理内存。类似于任务管理器
我目前正在使用PerformanceCounter("Memory", "Available MBytes", true);
但它还包括页面文件(我相信),这不是我想要的。此外,我想要获得使用而不是可用内存的选项。
我正在处理的应用程序将监视物理内存使用情况,直到达到所需的阈值。然后它将重启几个Windows服务。
如果你好奇我为什么要开发这样的程序。我们的一些程序在服务器上有内存泄漏,我们必须重新启动Windows服务以释放内存,直到我们解决所有内存泄漏,我正在使这个应用程序帮助保持服务器的运行和响应。
答案 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);
使用PerformanceCounter
,NextValue()
方法,您可以在MB
中获取可用内存值,稍后您可以将其与阈值进行比较值以停止所需的 Windows服务。
if (ramCounter.NextValue() > thresholdValue)
{
// ... Stop Desired Services
}
答案 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