如何像任务管理器一样获得当前的CPU使用率 - Vb.net

时间:2018-04-17 14:00:34

标签: windows vb.net visual-studio-2012 cpu cpu-usage

我正在一个程序中工作,它需要获取当前的CPU使用率我是如何在vb.Net中实现的 我在这个网站上看到了答案 这是我无法复制它赢得的代码的链接让我, How to get CPU usage?

但是,由于我是vb的新手,我不知道在哪里放第一句话(' Import Namespace System.Diagnostics)我知道我需要在公共类form1之前放入Imports但是我无法在那里进口。

先谢谢, Anes08

3 个答案:

答案 0 :(得分:1)

你可以使用LblCpuUsage.text = CombinedAllCpuUsageOfEachThread.NextValue() 。有一个帮助程序库来获取该信息:

  

性能数据助手(请参阅使用PDH功能进行消耗)   计数器数据(Windows)[^])

Microsoft示例在C中,但也有相应的VB(不是.Net)函数:

  

Visual Basic的性能计数器函数(Windows)[^]

答案 1 :(得分:1)

虽然不允许回答这些问题,但仍然可以帮助您入门:

   Dim cpu as New System.Diagnostics.PerformanceCounter 
   cpu.CategoryName = "Processor"
   cpu.CounterName = "% Processor Time"
   cpu.InstanceName = "_Total"
   MessageBox(cpu.NextValue.ToString & "%")

如果它不起作用,那么这是一个更好的版本:

  Dim cpu as PerformanceCounter  '''Declare in class level

 'On form load(actually you need to initialize it first)

  cpu = new PerformanceCounter("Processor", "% Processor Time",    "_Total")

  '''Finally,get the value :

  MsgBox(cpu.NextValue & "%") '''Use .ToString if required

答案 2 :(得分:0)

对我来说,我想要一个平均值。在获得CPU利用率方面存在一些问题,似乎应该解决一个简单的程序包,但我没有看到。

第一个当然是第一个请求的值为0是无用的。既然您已经知道第一个响应为0,那么为什么函数不将其考虑在内并返回true .NextValue()?

第二个问题是,当尝试确定应用可能会由于峰值或两次峰值之间的可用资源而做出决策时,瞬时读数可能会非常不准确。

我的解决方案是执行一个for循环,该循环循环并为您提供过去几秒钟的平均值。您可以调整计数器以使其变短或变长(只要大于2)。

public static float ProcessorUtilization;

public static float GetAverageCPU()
{
    PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName);
    for (int i = 0; i < 11; ++i)
    {
        ProcessorUtilization += (cpuCounter.NextValue() / Environment.ProcessorCount);
    }
    // Remember the first value is 0, so we don't want to average that in.
    Console.Writeline(ProcessorUtilization / 10); 
    return ProcessorUtilization / 10;
}