在NET Core 中获取 CPU 使用率

 更新时间:2022年01月25日 17:28:09   作者:DotNetCore实战   
这篇文章我们分享一种如何在 .NETCore 中获取 CPU使用率的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的,下面来看看文中的具体详细介绍吧

以下文章来源于微信公众号DotNetCore实战 

.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利用率基本是一致的。

到此这篇关于在NET Core 中获取 CPU 使用率的文章就介绍到这了,更多相关NET Core 中获取 CPU 使用率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

译文链接:https://medium.com/@jackwild/getting-cpu-usage-in-net-core-7ef825831b8b

相关文章

  • 一文透彻详解.NET框架类型系统设计要点

    一文透彻详解.NET框架类型系统设计要点

    这篇文章主要为大家透彻详解了选择.NET框架的n个理由,本系列的第一篇文章全面概述了平台的支柱和设计要点,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • ASP.NET Core MVC 依赖注入View与Controller

    ASP.NET Core MVC 依赖注入View与Controller

    本文重点给大家介绍的是ASP.NET Core MVC 之依赖注入 View 和ASP.NET Core MVC 之依赖注入 Controller的相关资料,需要的小伙伴可以参考下面文章具体内容
    2021-09-09
  • .Net性能调优-ArrayPool详情

    .Net性能调优-ArrayPool详情

    ArrayPool具有高性能 托管 数组缓冲池,可重复使用,用 租用 空间的方式代替 重新分配 数组空间的行为的特点及可以在频繁创建和销毁数组的情况下 提高性能 ,减少垃圾回收器的压力的优点,下面文章内容将详细对其做介绍,需要的朋友可以参考一下
    2021-09-09
  • ABP入门系列应用BootstrapTable表格插件

    ABP入门系列应用BootstrapTable表格插件

    Bootstrap table是一个开源的轻量级功能非常丰富的前端表格插件。下面通过本文给大家介绍ABP入门系列应用BootstrapTable表格插件,感兴趣的朋友一起学习吧
    2017-03-03
  • ASP.NET Web API教程 创建域模型的方法详细介绍

    ASP.NET Web API教程 创建域模型的方法详细介绍

    本文将介绍几种常见的创建域模型的方法,有需要的朋友可以适当的参考
    2012-11-11
  • .NET新能源汽车锂电池检测程序UI挂死问题分析

    .NET新能源汽车锂电池检测程序UI挂死问题分析

    这篇文章主要为大家介绍了.NET新能源汽车锂电池检测程序UI挂死问题分析 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 简单实现.NET Hook与事件模拟实例

    简单实现.NET Hook与事件模拟实例

    这篇文章主要为大家介绍了简单实现.NET Hook与事件模拟实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • .Net Core HttpClient处理响应压缩详细

    .Net Core HttpClient处理响应压缩详细

    .Net Core作为后起之秀直接将HttpClient扶正,并且在此基础上改良了HttpClientFactory,接下来我们就来探究一下在.Net Core中使用HttpClient处理响应压缩的机制。,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • upload上传单张图片

    upload上传单张图片

    这篇文章主要介绍了upload上传单张图片的代码,需要的朋友可以参考下。
    2015-07-07
  • ASP.NET Core使用功能开关控制路由访问操作

    ASP.NET Core使用功能开关控制路由访问操作

    这篇文章主要介绍了ASP.NET Core使用功能开关控制路由访问操作,而对于一些试验性的功能,我们并不希望用密码去控制是否允许访问,而是想用一种开关的方式开放,下面文章我们就来试着实现这个功能,需要的小伙伴可以参考一下
    2022-02-02

最新评论