这篇文章我们分享一种如何在 .NETCore 中获取 CPU 使用率 的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的。
在 .NET Framework 中,很多人会用 PerformanceCounter 类做这件事情,参考如下代码:
public class Program { public static void Main(string[] args) { while ( true ) { var cpuUsage = GetCpuUsageForProcess(); Console.WriteLine(cpuUsage); } } private static int GetCpuUsageForProcess() { var currentProcessName = Process.GetCurrentProcess().ProcessName; var cpuCounter = new PerformanceCounter( "Process" , "% Processor Time" , currentProcessName); cpuCounter.NextValue(); return ( int )cpuCounter.NextValue(); } }但 PerformanceCounter 在 .NETCore 中是没有的,所以只能采用其他方式了,其实在 System.Diagnostics.Process 类中有一个 TotalProcessorTime 属性,它可以准实时的统计当前进程所消耗的CPU处理器时间,参考如下代码:
class Program { public static async Task Main(string[] args) { var task = Task.Run(() => ConsumeCPU(50)); while ( true ) { await Task.Delay(2000); var cpuUsage = await GetCpuUsageForProcess(); Console.WriteLine(cpuUsage); } } public static void ConsumeCPU( int percentage) { Stopwatch watch = new Stopwatch(); watch.Start(); while ( true ) { if (watch.ElapsedMilliseconds > percentage) { Thread.Sleep(100 - percentage); watch.Reset(); watch.Start(); } } } private static async Task< double > GetCpuUsageForProcess() { var startTime = DateTime.UtcNow; var startCpuUsage = Process.GetCurrentProcess().TotalProcessorTime; await Task.Delay(500); var endTime = DateTime.UtcNow; var endCpuUsage = Process.GetCurrentProcess().TotalProcessorTime; var cpuUsedMs = (endCpuUsage - startCpuUsage).TotalMilliseconds; var totalMsPassed = (endTime - startTime).TotalMilliseconds; var cpuUsageTotal = cpuUsedMs / (Environment.ProcessorCount * totalMsPassed); return cpuUsageTotal * 100; } }
可以看到程序每2s输出一次,观察到 output 和 任务管理器 中的CPU利用率基本是一致的。
译文链接:https://medium.com/@jackwild/getting-cpu-usage-in-net-core-7ef825831b8b
原文链接:https://mp.weixin.qq.com/s/MdL5HBcHgbo_3DMshc5Gfg
查看更多关于如何在 .NET Core 中获取 CPU 使用率的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did186387