【问题标题】:How to Get Current CPU Usage Like Task Manager - Vb.net如何像任务管理器一样获取当前 CPU 使用率 - Vb.net
【发布时间】:2018-09-27 13:02:21
【问题描述】:

我正在一个程序中工作,它需要获取当前的 CPU 使用情况我如何在 vb.Net 中实现这一点 我尝试了 4 个代码,但我仍然每次都得到 0%。这是我用过的一个例子Link

提前致谢, Anes08

【问题讨论】:

  • 这个问题很容易回答......并且已经回答了无数次,介意look
  • 这是我正在寻找 vb.net 的 C#
  • 对我不起作用 还有其他建议吗?
  • 为什么不看看我的回答?
  • 现有答案不起作用的唯一原因是因为它实际上是Imports 而不是Import

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


【解决方案1】:

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

性能数据助手(请参阅使用 PDH 函数来消费 计数器数据 (Windows)[^])

.

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

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

【讨论】:

    【解决方案2】:

    虽然不允许回答这样的问题,但是,这里有一些可以帮助你入门的东西:

       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
    

    【讨论】:

    • 我在插入“%”时得到 0 btw 它在构建中出现问题
    • @Anes08 他们搞砸了,用 & 代替 + :)
    • @Jaxi,你说得对,如果他在.ToString 之后使用.ToString,他本可以选择+ .. 但谁知道他不知道哈哈 :)
    • 我尝试了 4 个代码,但每个代码都得到 0% 为什么?
    • @Anes08 ,重新检查我的答案 :)
    【解决方案3】:

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

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

    第二个问题是,在尝试决定您的应用可能拥有哪些资源时,瞬时读数可能非常不准确,因为它可能处于峰值或峰值之间。

    我的解决方案是做一个循环循环,并为您提供过去几秒钟的平均值。您可以调整计数器使其变短或变长(只要大于 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-29
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      相关资源
      最近更新 更多