获取cpu使用率 C#程序能以某种方式测量自己的CPU使用情况吗?




c#获取cpu使用率 (4)

你可以通过System.Diagnostic.PerformanceCounter类。 以下是某人监视CPU使用情况的示例:

http://blogs.msdn.com/dotnetinterop/archive/2007/02/02/system-diagnostics-performancecounter-and-processor-time-on-multi-core-or-multi-cpu.aspx

请注意,这确实需要提升特权。 使用它可能会造成性能下降。

我正在研究一个将要运行很长时间的后台程序,并且我有一个外部日志程序( SmartInspect ),我想定期使用一些值来进行调试,以在调试时实时监控它。

我知道我可以简单地启动多个程序,比如任务管理器,或者IARSN TaskInfo,但是我想把所有的东西放在我自己的程序中,因为我也想添加一些简单的规则,比如程序使用多于X%CPU,在日志中标记这个。

我有一个后台线程,定期向SmartInspect提供一些统计信息,如内存消耗,工作集等。

这个线程是否有可能准确衡量它消耗了多少计算机的CPU资源? 主程序是一个单线程应用程序(除了看门狗线程记录统计),所以如果一种技术被限制在一个线程使用多少,那么这也是一个好主意。

我发现了一些与Linux和C的rusage相关的条目。有没有类似的东西可以用于这个?

编辑:好的,我尝试了性能计数器的方式,但是每次调用时都添加了很多GC数据,所以内存使用和垃圾收集的图形猛增。 我想我现在就把这一部分拿出来。


这是好事,你正在登录像smartInspect监视器。 但是Windows本身收集每个资源的数据,在这种情况下你的程序(或进程)。 WMI是应用程序监视的标准。 我们可以查看WMI捕获的数据。 许多应用程序管理,运行状况监视或应用程序监视工具都支持WMI。

所以我不建议你将应用程序中的CPU使用情况记录到日志文件中。

如果您认为可用性和性能至关重要,那么请使用Microsoft Operations Manager解决方案等解决方案。

想了解一下WMI和获取进程列表,请参阅下面的内容: - Win32_PerfFormattedData_PerfProc_Process获取Cpu时间,filter是processID 请参阅本文 - 您可以从Win32_process类获取processID。

WMI让C#变得简单 Kevin Matthew Goss

oConn.Username = "JohnDoe";
oConn.Password = "JohnsPass";

System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\MachineX", oConn);    

//get Fixed disk stats
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");

//Execute the query 
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs,oQuery);

//Get the results
ManagementObjectCollection oReturnCollection = oSearcher.Get();   

//loop through found drives and write out info
foreach( ManagementObject oReturn in oReturnCollection )
{
    // Disk name
    Console.WriteLine("Name : " + oReturn["Name"].ToString());
    // Free Space in bytes
    Console.WriteLine("FreeSpace: " + oReturn["FreeSpace"].ToString());
    // Size in bytes
    Console.WriteLine("Size: " + oReturn["Size"].ToString());
} 

您也可以从远程系统监视进程。



看看System.Diagnostics.PerformanceCounter 。 如果运行perfmon.exe ,您将看到可用的性能计数器范围(将“性能对象”设置为“进程”),其中之一是“处理器时间百分比”。







performancecounter