当前位置: 首页 > 编程语言 > C#

当前进程的性能计数器CPU使用率超过100分享

时间:2023-04-10 13:23:57 C#

当前进程的性能计数器CPU使用率超过100我想显示我的多线程应用程序(在多核处理器上工作)的CPU使用率。我想在任务管理器附近接收号码。但我得到的数字超过100%。甚至超过500%。是的,我知道,对于“进程”类别的计数器“%ProcessorTime”,我需要拆分为Environment.ProcessorCount或“NumberOfLogicalProcessors”(我的配置相同)。此操作后的结果是500%。我在具有不同硬件(i7、i5、Core2)和软件配置(具有所有更新的Windows7SP1、具有所有更新的Windows2008R2SP1)的不同计算机上测试了这个示例,但遇到了同样的问题。publicstaticclassSystemInfo{privatestaticProcess_thisProc;私有静态布尔HasData=false;私有静态PerformanceCounter_processTimeCounter;privatestaticvoidInit(){如果(HasData)返回;if(CheckForPerformanceCounterCategoryExist("Process")){_processTimeCounter=newPerformanceCounter();_processTimeCounter.CategoryName="进程";_processTimeCounter.CounterName="%处理器时间";_processTimeCounter.InstanceName=FindInstanceName("进程");_processTimeCounter.NextValue();}MaximumCpuUsageForCurrentProcess=0;有数据=真;}privatestaticboolCheckForPerformanceCounterCategoryExist(stringcategoryName){returnPerformanceCounterCategory.Exists(categoryName);}publicstaticstringFindInstanceName(stringcategoryName){stringresult=String.Empty;_thisProc=Process.GetCurrentProcess();if(!ReferenceEquals(_thisProc,null)){if(!String.IsNullOrEmpty(categoryName)){if(CheckForPerformanceCounterCategoryExist(categoryName)){PerformanceCounterCategory类别=newPerformanceCounterCategory(categoryName);字符串[]实例=category.GetInstanceNames();stringprocessName=_thisProc.ProcessName;if(instances!=null){foreach(stringinstanceininstances){if(instance.ToLower().Equals(processName.ToLower())){result=instance;休息;}}}}}}}返回结果;}publicstaticintCpuUsageForCurrentProcess{get{Init();,null)){int结果=(int)_processTimeCounter.NextValue();结果/=Environment.ProcessorCount;//NumberOfLogicalProcessors//对我来说相同if(MaximumCpuUsageForCurrentProcess{do{if(backgroundWorker1.CancellationPending)break;backgroundWorker1.ReportProgress(1);Thread.Sleep(10);}while(true);});displayProgress.Start();任务。添加(显示进度);Task.WaitAll(tasks.ToArray());}privatevoidbackgroundWorker1_ProgressChanged(objectsender,ProgressChangedEventArgse){label1.Text=SystemInfo.CpuUsageForCurrentProcess.ToString();label2.Text=SystemInfo.MaximumCpuUsageForCurrentProcess.ToString();}privatevoidbutton1_Click(objectsender,EventArgse){label1.Text=SystemInfo.CpuUsageForCurrentProcess.ToString();如果(backgroundWorker1.IsBusy)backgroundWorker1.CancelAsync();否则backgroundWorker1.RunWorkerAsync();}请告诉我我的错误是的,我读了这篇文章并注意到“Process(...)%ProcessorTime”可以达到N*100(其中N是CPU的数量),因为它汇总了所有CPU中所请求进程的CPU使用率.这个(有点相关的)问题建议使用System.Diagnostics.Process.TotalProcessorTime和System.Diagnostics.ProcessThread.TotalProcessorTime属性,以实现低开销和简单的实现。(编辑:这是一篇解释如何使用属性的文章。)此外,看起来您在“_processTimeCounter.NextValue()”调用之间等待的时间不够长。根据文档,您应该至少等待1秒钟。不确定这是否会导致您出现奇怪的数字。以上就是C#学习教程的全部内容:性能计数器当前进程CPU使用率超过100,如果对您有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: