获取当前CPU利用率在C#

获取当前CPU利用率在C#,第1张

概述我想在我的项目中使用当前的CPU namespace Monitoring_Tool{ public partial class ajaxExecute : System.Web.UI.Page { private PerformanceCounter theCPUCounter = new PerformanceCounter("Processor", "% P 我想在我的项目中使用当前的cpu
namespace Monitoring_Tool{    public partial class AJAXExecute : System.Web.UI.Page    {        private PerformanceCounter thecpuCounter = new PerformanceCounter("Processor","% Processor Time","_Total");        private PerformanceCounter thememCounter = new PerformanceCounter("Memory","Available MBytes");        protected voID Page_Load(object sender,EventArgs e)        {            float cpuUsage = 0.00F;            cpuUsage = this.thecpuCounter.NextValue();        }    }}

当我调试我的项目时,cpuUsage中的值显示为0.00,但是当我在此时执行QuickWatch.cpuCounter.NextValue();它显示20.6786852.

为什么不能将它存储在变量中?

解决方法 这是因为您需要在同一个PerformanceCounter实例上多次调用NextValue(至少要两次).第一个调用将始终返回0.

您可以通过在Page_Load事件处理程序中调用NextValue两次来解决这个问题,只存储第二个调用的返回值:

float cpuUsage = 0.00F;        this.thecpuCounter.NextValue();        cpuUsage = this.thecpuCounter.NextValue();

它在调试器的QuickWatch中显示的原因可能只是因为(隐式)被多次调用(一次由程序,一次由调试器用于QuickWatch值).

更新到上面的“排序”:

正如其他人所提到的,通常需要在两次呼叫之间睡觉一段时间才能实际观察到cpu负载的差异,导致“可衡量”的差异.睡眠1秒通常会做到这一点,但是在您的页面加载时可能不是可以接受的延迟.

你真正想做的是提供一个后台线程,重复查询这个性能计数器,在两秒钟之间睡觉几秒钟.并将结果存储在某处.从您的Page_Load或其他事件/函数查询(最后)值.当然,所有必要的锁定数据竞赛.
对于这个指针,它将是准确的.

由于您显然使用ASP.NET,您必须小心这些后台线程.我不是ASP.NET专家,但根据this,应该是可能的,即使你的应用程序域/ Web应用程序是线程(和perf计数器读取它)将被回收.但是,对于这种不应该是一个问题的功能.

总结

以上是内存溢出为你收集整理的获取当前CPU利用率在C#全部内容,希望文章能够帮你解决获取当前CPU利用率在C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1258536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存