C#程序可以以某种方式测量自己的CPU使用率吗?

ang*_*son 39 c# cpu monitoring performancecounter

我正在开发一个将运行很长时间的后台程序,我有一个外部日志记录程序(SmartInspect),我希望定期提供一些值,以便在调试时实时监控它.

我知道我可以简单地启动多个程序,比如任务管理器或IARSN TaskInfo,但是我想在我自己的程序中保留所有内容,因为我还想添加一些简单的规则,比如程序使用的多于X%CPU,在日志中标记它.

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

这个线程是否有可能合理准确地衡量它消耗的计算机CPU资源量?主程序是单线程应用程序(除了记录统计信息的监视程序线程),因此如果一种技术仅限于单个线程使用多少,那么这也是好的.

我找到了一些与Linux和C的rusage相关的条目.我可以使用类似的东西吗?


编辑:好的,我尝试了性能计数器方式,但每次调用时都添加了大量的GC数据,因此内存使用和垃圾收集的图表飙升.我想我现在就把这部分留下来.

axk*_*axk 49

您也可以使用System.Diagnostics.Process.TotalProcessorTimeSystem.Diagnostics.ProcessThread.TotalProcessorTime属性,用于计算您的处理器使用情况,如本文所述.


小智 8

看看System.Diagnostics.PerformanceCounter.如果你运行起来perfmon.exe,你会看到可用的性能计数器范围(将'性能对象'设置为'进程'),其中一个是'%Processor Time'.

  • 这个答案对我来说效果最好。不过,我想补充一点:1. 您必须确保每秒只从计数器中获取下一个值,或者频率低于此次数,否则结果会关闭,以及 2. 如果您正在查看 CPU统计数据,你必须除以 Environment.ProcessorCount 否则你会得到疯狂的百分比,比如在 8 核机器上高达 800%。 (2认同)