如何在 .NET Core 中获取 CPU 使用率

这篇文章我们分享一种如何在 .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;}}
c4bdbd40139529ad9d596420739406cf.png

可以看到程序每2s输出一次,观察到 output 和 任务管理器 中的CPU利用率基本是一致的。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uml 类图聚合与组合

聚合 聚合是关联关系的一种特例&#xff0c;他体现的是整体与部分、拥有的关系&#xff0c;即has-a的关系&#xff0c;此时整体与部分之间是可分离的&#xff0c;他们可以具有各自的生命周期&#xff0c;部分可以属于多个整体对象&#xff0c;也可以为多个整体对象共享&#xf…

Android之ViewPager使用(用美女做的背景,给你疲惫的眼睛视觉冲击)

ViewPager的使用 我们先爆照,来点视觉冲击,其它的ViewPager弱爆了 照片看完了,接来下我们就来实现,just do it 第一步 你的项目需要有android-support-v4.jar的包,你懂的,有了才会支持ViewPager 第二步 看下项目的结构图片

深入探讨用位掩码代替分支(8):SSE指令集速度测试

在上一篇测试了MMX指令集&#xff0c;这次我们来测试SSE指令集。说的更精确一点&#xff0c;是测试SSE2指令集。  本篇致力于解决以下问题——1.SSE/SSE2指令集是什么&#xff1f;2.如何阅读Intel/AMD的手册&#xff1f;3.如何运用SSE指令集&#xff1f;如何将MMX代码升级为S…

mysql字段简索引_MySQL优化看这一篇就够了

本文概要概述为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上随着应用程序的运行&#xff0c;数据库的中的数据会越来越多&#xff0c;处理时间会相应变慢数据是存放在磁盘上的&#xff0c;读写速度无法和内存相比如何优化设计数据库时&#xff1a;数据库表、字段的…

centos 7 安装openstack kilo in three node

教程请参考官方教程只是罗列了一些遇到的问题与解决方法1.keystone 无法启动可以先执行以下操作# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone# chown -R keystone:keystone /var/log/keystone# chown -R keystone:keystone /etc/keystone/…

计算机老师开场白试讲视频,教师招考试讲模版之开场白

除了说课外&#xff0c;很多地区也会选用试讲作为面试形式&#xff0c;很多同学笔试过了在准备面试的时候容易忽视开场白的作用&#xff0c;其实&#xff0c;给听课者留下一个好的初始印象十分重要。大家在评阅文章时常常听到的一种手法就是开门见山&#xff0c;这是写文章的一…

.NET 6 Talk Party 2|.NET Core 与行业

关注我们微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0c;将每周三到周六&#xff0c;组织 3~5 场线上分享活动。欢迎跟着…

施一公:中国还缺乏真正的世界顶尖大学,研究生该听听这些建议

全世界只有3.14 % 的人关注了爆炸吧知识“中国的科技发展很快&#xff0c;变得很大&#xff0c;但还不够强&#xff1b;中国的人才众多&#xff0c;变得很大&#xff0c;但还不够强。中国是一个高等教育大国&#xff0c;但从权威的世界大学排名来看&#xff0c;中国缺乏真正的世…

Android之Fragment 真正的完全解析(上)

转载出处&#xff1a;http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现&#xff0c;曾经有段时间&#xff0c;感觉大家谈什么都能跟Fragment谈上关系&#xff0c;做什么都要问下Fragment能实现不~~~哈哈&#xff0c;是不是有点过~~~ 本篇博客力求…

第零讲.1 tapestry项目创建与运行

2019独角兽企业重金招聘Python工程师标准>>> 1、在eclipse工程目录下创建项目&#xff1a; 第一次运行eclipse的时候会弹出选择工程项目存放地点&#xff0c;如我的存放路径D:\workspace。我们就把tapestry创建的项目放到这个目录方便统一管理。 打开系统的命令提示…

阿里云-数据盘挂载

2019独角兽企业重金招聘Python工程师标准>>> 硬盘分区及挂载操作步骤&#xff1a; 1. 查看未挂载的硬盘&#xff08;名称为/dev/xvdb&#xff09; # fdisk -l Disk /dev/xvdb doesnt contain a valid partition table 2. 创建分区 # fdisk /dev/xvdb ... 输入n Comm…

composer 查看php 版本_最常用的PHP版本:PHP 7.3取代7.2

php中文网最新课程每日17点准时技术干货分享自2014年以来&#xff0c;Private Packagist的联合创始人Jordi Boggiano一直在撰写半年度报告&#xff0c;介绍各种PHP版本的使用情况。他从packagist.io上的Composer安装中获取数据库。从2019年5月开始&#xff0c;PHP 7.3已在2019年…

jq中法可以发起ajax请求的方法有,jQuery实现监控页面所有ajax请求的方法

本文实例讲述了jQuery实现监控页面所有ajax请求的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;你是不是有遇到这样的问题&#xff1a;页面发起两个ajax请求&#xff0c;希望它们都成功以后&#xff0c;再做一个动作&#xff1f;很容易想到的解决方案是&#xf…

钱少也就算了,为啥我们还越来越忙?

全世界只有3.14 % 的人关注了爆炸吧知识你是否时常感觉自己的生活总是不富裕&#xff0c;但工作却越来越忙&#xff1f;那是因为我们想得到的东西太多&#xff0c;但能够燃烧的生命却太少。那些对未来的焦虑、恐惧&#xff0c;说白了&#xff0c;就是想的太多。随着经历和阅历的…

Hello Blazor:(14)CSS隔离

前言上次我们说到&#xff0c;FindRazorSourceFile使用有一定限制.查看它的源码&#xff0c;发现它仅查找以b-开头属性名的HTML元素&#xff1a;function getScope(element: Element): string | null {return element.getAttributeNames().filter(name > name.startsWith(b-…

关于iPhone的UIView刷新(转)

大家应该都比较清楚如果想要刷新一个UIView的话&#xff0c;调用它的setNeedsDisplay即可。 问题是&#xff0c;当你调用了一个UIView的setNeedsDisplay之后&#xff0c;该UIView何时才得到刷新&#xff1f; 经过调研发现&#xff0c;应该是在一个runloop的最后阶段刷新。 什么…

Android之Broadcast, BroadcastReceiver(广播)

在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当于后台运行的 Activity 广播(Broadcast) - 用于发送广播 广播接收器(BroadcastReceiver) - 用于接收广播 Intent - 用于连接以上各个组件,并在其间…

Exchange Connector 访问报错解决方法一

Exchange Connector 可是个好东东&#xff0c;下载地址如下&#xff1a; http://www.microsoft.com/downloads/details.aspx?familyid0140bc6d-1c51-41f6-a473-d0e04690ee5e A great little add on for Exchange 2007 and Visio 2007 which will help automatically graphical…

服务器系统吞吐量是否就是带宽,多少带宽才够用(一):简介与吞吐量问题

“带宽”对于网络管理人员、建筑师和技术人员来说是毫无意义的一个术语&#xff0c;相反&#xff0c;他们使用“数据传输率”、“连接性能”或者甚至“网速”来简单地代替这个术语&#xff0c;这就说明了一个问题&#xff0c;我们对网络有点无知&#xff0c;至少对在OSI模式的7…

CSS- 横向和纵向时间轴

时间轴在展示公司发展信息&#xff0c;服务流程中用的比较多&#xff0c;常见的注册登录有的是通过引导&#xff0c;一步一步的来完成&#xff0c;上面会通过时间轴告诉用户当前在哪一步&#xff0c;公司在关于我们或者发展流程的时候也特别喜欢用时间轴来展示&#xff0c;简单…