如何像任务管理器一样获取当前 CPU 用法 - Vb.net
How to Get Current CPU Usage Like Task Manager - Vb.net
我在一个需要获取当前 CPU 用法的程序中工作 我如何在 vb.Net 中实现它
我尝试了 4 个代码,但我每次仍然得到 0%。这是我使用过的一个例子 Link
提前致谢,
Anes08
你可以使用 LblCpuUsage.text = CombinedAllCpuUsageOfEachThread.NextValue()
.有一个帮助库来获取该信息:
The Performance Data Helper (see Using the PDH Functions to Consume
Counter Data (Windows)[^])
.
Microsoft 示例是用 C 编写的,但也有相应的 VB(不是 .Net)函数:
Performance Counters Functions for Visual Basic (Windows)[^]
虽然不允许回答此类问题,但仍然可以帮助您入门:
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
对我来说,我想要一个平均值。 CPU 利用率有几个问题,似乎应该有一个简单的包可以解决,但我没有看到。
首先当然是第一个请求的值为0是没有用的。既然您已经知道第一个响应是 0,为什么该函数不考虑它并 return 真正的 .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;
}
我在一个需要获取当前 CPU 用法的程序中工作 我如何在 vb.Net 中实现它 我尝试了 4 个代码,但我每次仍然得到 0%。这是我使用过的一个例子 Link
提前致谢, Anes08
你可以使用 LblCpuUsage.text = CombinedAllCpuUsageOfEachThread.NextValue()
.有一个帮助库来获取该信息:
The Performance Data Helper (see Using the PDH Functions to Consume Counter Data (Windows)[^])
.
Microsoft 示例是用 C 编写的,但也有相应的 VB(不是 .Net)函数:
Performance Counters Functions for Visual Basic (Windows)[^]
虽然不允许回答此类问题,但仍然可以帮助您入门:
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
对我来说,我想要一个平均值。 CPU 利用率有几个问题,似乎应该有一个简单的包可以解决,但我没有看到。
首先当然是第一个请求的值为0是没有用的。既然您已经知道第一个响应是 0,为什么该函数不考虑它并 return 真正的 .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;
}