在NET Core 中获取 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

(0)

相关推荐

  • 使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析

    公司的产品一直紧跟 .net core 3.0 preview 不断升级, 部署到 Linux 服务器后, 偶尔会出现某个进程CPU占用100%. 由于服务部署在云上, 不能使用远程调试; 在局域网内的Linux 服务器 或 Windows开发机上又不能重现这个问题, 联想到Java的jstack, 很是羡慕啊. 想到.net core 已经出来这么久了, 还是试着找找看吧, 结果还真找到一篇博客Introducing diagnostics improvements in .NET Core

  • 在NET Core 中获取 CPU 使用率

    以下文章来源于微信公众号DotNetCore实战  在 .NET Framework 中,很多人会用 PerformanceCounter 类做这件事情, 如下代码:     public class Program     {         public static void Main(string[] args)         {             while (true)             {                 var cpuUsage = GetCpuUs

  • VBScript获取CPU使用率的方法

    VBScript通过WMI获取CPU使用率的代码 度娘中,搜索关键词"WMI CPU使用率",得到的全是<python使用WMI监视系统-CPU使用率>,不用看,肯定又是采集的. Python固然强大,但是调用WMI还是用VBS比较"正宗". On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" &

  • golang中定时器cpu使用率高的现象详析

    前言: 废话少说,上线一个用golang写的高频的任务派发系统,上线跑着很稳定,但有个缺点就是当没有任务的时候,cpu的消耗也在几个百分点. 平均值在3%左右的cpu使用率.你没有任务的时候,cpu还跑到3%,这个说不过去呀.通过查看进程pidstat捕获得知,system系统的cpu消耗也不少. sys的cpu占用率高一般是由于大量的syscall系统调用引起的-. 下面的截图是用strace统计出来的系统调用-. 我们发现  futex 和 pselect6 的syscall非常的多-. 

  • VBS通过WMI获取CPU使用率的代码

    Python固然强大,但是调用WMI还是用VBS比较"正宗". 复制代码 代码如下: On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Selec

  • 如何在ASP.NET Core中给上传图片功能添加水印实例代码

    前言 因某些原因需要在图片上添加文字水印.图片水印,所以这里做个简单的记录.下面话不多说了,来一起看看详细的实现过程吧 实现方法: 在传统的.NET框架中,我们给图片添加水印有的是通过HttpModules或者是HttpHandler,然后可以通过以下代码添加水印: var image = new WebImage(imageBytes); image.AddTextWatermark( Settings.Instance.WatermarkText, "White", Setting

  • JavaScript获取当前cpu使用率的方法

    本文实例讲述了JavaScript获取当前cpu使用率的方法.分享给大家供大家参考,具体如下: 想获取当前系统cpu的使用率,如果允许使用hta,可以使用以下的代码获取当前cpu的使用率(较为精确) setInterval(function() { var locator=new ActiveXObject ("WbemScripting.SWbemLocator"); var service=locator.ConnectServer("."); var cpu=

  • C++获取特定进程CPU使用率的实现代码

    近来发现笔记本在关闭屏幕后风扇转得特别快,打开屏幕后看任务管理器,风扇马上减速,也没有发现大量占用CPU的进程.于是想写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程.于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况.本人编程还只是个新手,如有问题请多多指教( •̀ ω •́ )! 计算原理为调用GetProcessTimes(),与上次调用得到的结果相减得到CPU占用时间,再除以两次调用的时间差,从而得到占用百分比.其中OpenProces

  • 使用python获取cpu每秒的使用率

    目录 获取cpu每秒的使用率 要求 在cpu.txt文件中 python充分利用cpu 多线程无法增加cpu使用率的原因 如何充分使用多核跑程序 1. multiprocessing 2. C 语言扩展机制 3. ctypes 获取cpu每秒的使用率 要求 请获取某段时间的cpu的占有率,以持久化形式保存. 代码: import psutil import time # cpu_res = psutil.cpu_percent() # print(cpu_res) # 每一秒获取获取cpu的占有

  • Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

    本文实例讲述了Android编程实现获取系统内存.CPU使用率及状态栏高度的方法.分享给大家供大家参考,具体如下: DeviceInfoManage类用于获取系统的内存,CPU的信息,以及状态栏的高度 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReade

  • 在ASP.NET Core中应用HttpClient获取数据和内容

    在本文中,我们将学习如何在ASP.NET Core中集成和使用HttpClient.在学习不同HttpClient功能的同时使用Web API的资源.如何从Web API获取数据,以及如何直接使用HttpRequestMessage类来实现这些功能.在以后的文章中,我们将学习如何发送POST.PUT和DELETE请求,以及如何使用HttpClient发送PATCH请求. 要下载源代码,可以访问https://github.com/CodeMazeBlog/httpclient-aspnetcor

随机推荐