我试过这段代码:
public static string GetProcessMemoryUsage(string processName)
{
while (true)
{
PerformanceCounter performanceCounter = new PerformanceCounter();
performanceCounter.CategoryName = "Process";
performanceCounter.CounterName = "Working Set";
performanceCounter.InstanceName = Process.GetCurrentProcess().ProcessName;
processName = ((uint)performanceCounter.NextValue() / 1024).ToString(processName);
return processName;
}
}
如果进程名称是例如:BFBC2Game 然后方法GetProcessMemoryUsage只返回名称:BFBC2Game 我希望它返回内存使用值数字,如在Windows中的任务管理器中,例如当我运行任务管理器时,我在BFBC2Game上看到:78%和198.5MB内存使用情况。
这就是我想要在返回的字符串processName中获得的内容:78%和198.5MB 这样的事情。而且它会在循环中一直得到更新。与任务管理器中的相同。
答案 0 :(得分:3)
使用
var workingSet = (uint)performanceCounter.NextValue() / 1024;
return workingSet.ToString();
使用UInt32.ToString(processName)
时,进程名称将被视为数字的格式字符串。所以,你有像"Notepad.exe"
这样的格式字符串。它没有数字的占位符,因此结果等于格式化字符串值,即进程名称。
注意 - 将内存使用价值分配给processName
变量非常令人困惑。我建议从此方法返回uint
值:
public static uint GetProcessMemoryUsageInKilobytes(string processName)
{
var performanceCounter =
new PerformanceCounter("Process", "Working Set", processName);
return (uint)performanceCounter.NextValue() / 1024;
}
甚至只需使用Process.WorkingSet64
来获取分配给处理的内存量。