我想在c#中获得一个应用程序的总的CPU使用情况。我已经找到了很多方法来深入研究进程的属性,但我只想知道进程的CPU使用情况,以及你在TaskManager中得到的总CPU。
我怎么做呢?
我想在c#中获得一个应用程序的总的CPU使用情况。我已经找到了很多方法来深入研究进程的属性,但我只想知道进程的CPU使用情况,以及你在TaskManager中得到的总CPU。
我怎么做呢?
当前回答
我不喜欢在所有的PerformanceCounter解决方案中添加1秒的停顿。相反,我选择使用WMI解决方案。1秒等待/失速存在的原因是允许在使用PerformanceCounter时读取准确。然而,如果你经常调用这个方法并刷新这个信息,我建议不要经常产生这种延迟…即使考虑做一个异步进程来获得它。
我从这里的代码片段开始,使用c#返回WMI中的CPU使用情况,并在下面的博客文章中添加了解决方案的完整解释:
在c#中使用WMI获取所有核心的CPU使用情况
其他回答
没事的,我知道了!谢谢你的帮助!
下面是代码:
private void button1_Click(object sender, EventArgs e)
{
selectedServer = "JS000943";
listBox1.Items.Add(GetProcessorIdleTime(selectedServer).ToString());
}
private static int GetProcessorIdleTime(string selectedServer)
{
try
{
var searcher = new
ManagementObjectSearcher
(@"\\"+ selectedServer +@"\root\CIMV2",
"SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name=\"_Total\"");
ManagementObjectCollection collection = searcher.Get();
ManagementObject queryObj = collection.Cast<ManagementObject>().First();
return Convert.ToInt32(queryObj["PercentIdleTime"]);
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
return -1;
}
您可以使用System.Diagnostics中的PerformanceCounter类。
像这样初始化:
PerformanceCounter cpuCounter;
PerformanceCounter ramCounter;
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
这样消费:
public string getCurrentCpuUsage(){
return cpuCounter.NextValue()+"%";
}
public string getAvailableRAM(){
return ramCounter.NextValue()+"MB";
}
public int GetCpuUsage()
{
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", Environment.MachineName);
cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000); //This avoid that answer always 0
return (int)cpuCounter.NextValue();
}
原始信息在此链接https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/
您可以使用WMI获取CPU百分比信息。如果您拥有正确的权限,您甚至可以登录到远程计算机。看看http://www.csharphelp.com/archives2/archive334.html,了解一下你能完成什么。
Win32_Process名称空间的MSDN引用可能也有帮助。
另见CodeProject示例如何:(几乎)一切在WMI通过c#。
这似乎对我有用,一个等待处理器达到一定百分比的例子
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
int usage = (int) cpuCounter.NextValue();
while (usage == 0 || usage > 80)
{
Thread.Sleep(250);
usage = (int)cpuCounter.NextValue();
}