Csharp/C#教程:从Process.TotalProcessorTime计算进程cpu使用情况分享


从Process.TotalProcessorTime计算进程cpu使用情况

我一直试图摆脱使用PerformanceCounter类来监视进程的CPU使用情况,因为当进程计数变得非常高时(监视大量进程时)它似乎需要相当数量的CPU。

我的第一种方法是使用Win32_PerfFormattedData_PerfOS_Processor类和PercentProcessorTime属性来获取WMI路由,但是在尝试计算多个核心的CPU使用率时似乎存在问题(它返回的最大值是100%,因此无法根据它进行划分关于CPU核心数,导致结果不准确)。

所以最后我决定使用Process的类TotalProcessorTime属性。 遗憾的是,我不确定如何根据该值计算Process使用的总CPU使用百分比。 我知道我应该从之前的PercentProcessorTime值中减去当前的PercentProcessorTime值,以获得处理器在特定时间限制内花费了多少时间,但我不确定如何从那里继续。

提前致谢。

上述就是C#学习教程:从Process.TotalProcessorTime计算进程cpu使用情况分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

class GetCPUUsage { static TimeSpan start; public static double CPUUsageTotal { get; private set; } public static double CPUUsageLastMinute { get; private set; } static TimeSpan oldCPUTime = new TimeSpan(0); static DateTime lastMonitorTime = DateTime.UtcNow; public static DateTime StartTime = DateTime.UtcNow; // Call it once everything is ready static void OnStartup() { start = Process.GetCurrentProcess().TotalProcessorTime; } // Call this every 30 seconds static void CallCPU() { TimeSpan newCPUTime = Process.GetCurrentProcess().TotalProcessorTime - start; CPUUsageLastMinute = (newCPUTime - oldCPUTime).TotalSeconds / (Environment.ProcessorCount * DateTime.UtcNow.Subtract(lastMonitorTime).TotalSeconds); lastMonitorTime = DateTime.UtcNow; CPUUsageTotal = newCPUTime.TotalSeconds / (Environment.ProcessorCount * DateTime.UtcNow.Subtract(StartTime).TotalSeconds); oldCPUTime = newCPUTime; } } class GetCPUInfo { public static string GetInfoMinute() { return String.Format("{0:0.0}", GetCPUUsage.CPUUsageLastMinute * 100); } public static string GetInfoTotal() { return String.Format("{0:0.0}", GetCPUUsage.CPUUsageTotal * 100); } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1014196.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐