Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c语言中获得CPU频率#_C#_Cpu_Frequency - Fatal编程技术网

C# 如何在c语言中获得CPU频率#

C# 如何在c语言中获得CPU频率#,c#,cpu,frequency,C#,Cpu,Frequency,我如何获得CPU频率(例如:2Ghz)的c值? 这很简单,但我在环境变量中找不到。 谢谢:)试试这段代码 using System.Management; uint currentsp , Maxsp; public void CPUSpeed() { using(ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'")) { currentsp = (uint)(Mo[

我如何获得CPU频率(例如:2Ghz)的c值? 这很简单,但我在环境变量中找不到。 谢谢:)

试试这段代码

using System.Management;

uint currentsp , Maxsp;
public void CPUSpeed()
{
   using(ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"))
   {
       currentsp = (uint)(Mo["CurrentClockSpeed"]);
       Maxsp = (uint)(Mo["MaxClockSpeed"]);
   }
}
试试这个代码

using System.Management;

uint currentsp , Maxsp;
public void CPUSpeed()
{
   using(ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"))
   {
       currentsp = (uint)(Mo["CurrentClockSpeed"]);
       Maxsp = (uint)(Mo["MaxClockSpeed"]);
   }
}

人们可以从注册表中取出这些信息,但不知道它是否适用于Windows XP或更早版本(我的是Windows 7)

读起来像

Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
对我来说

类似这样的代码可以检索信息(未测试):


(来源:)

人们可以从注册表中取出这些信息,但不知道它是否适用于Windows XP或更早版本(我的是Windows 7)

读起来像

Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
对我来说

类似这样的代码可以检索信息(未测试):

(来源:)

如果你想获得其他字段,请查看类


如果您希望获取其他字段,请查看类

,您可以通过WMI获取该字段,但速度非常慢,因此如果您不止一次获取该字段,我建议您将其缓存—类似于:

namespace Helpers
{
    using System.Management;

    public static class HardwareHelpers
    {
        private static uint? maxCpuSpeed = null;
        public static uint MaxCpuSpeed
        {
            get
            {
                return maxCpuSpeed.HasValue ? maxCpuSpeed.Value : (maxCpuSpeed = GetMaxCpuSpeed()).Value;
            }
        }

        private static uint GetMaxCpuSpeed()
        {
            using (var managementObject = new ManagementObject("Win32_Processor.DeviceID='CPU0'"))
            {
                var sp = (uint)(managementObject["MaxClockSpeed"]);

                return sp;
            }
        }
    }
}

您可以通过WMI获取它,但它的速度非常慢,因此,如果您不止一次获取它,我建议您将其缓存—类似于:

namespace Helpers
{
    using System.Management;

    public static class HardwareHelpers
    {
        private static uint? maxCpuSpeed = null;
        public static uint MaxCpuSpeed
        {
            get
            {
                return maxCpuSpeed.HasValue ? maxCpuSpeed.Value : (maxCpuSpeed = GetMaxCpuSpeed()).Value;
            }
        }

        private static uint GetMaxCpuSpeed()
        {
            using (var managementObject = new ManagementObject("Win32_Processor.DeviceID='CPU0'"))
            {
                var sp = (uint)(managementObject["MaxClockSpeed"]);

                return sp;
            }
        }
    }
}

如果要获得涡轮转速,可以使用“%Processor Performance”性能计数器并将其与WMI“MaxClockSpeed”相乘,如下所示:

private string GetCPUInfo()
{
  PerformanceCounter cpuCounter = new PerformanceCounter("Processor Information", "% Processor Performance", "_Total");
  double cpuValue = cpuCounter.NextValue();

  Thread loop = new Thread(() => InfiniteLoop());
  loop.Start();

  Thread.Sleep(1000);
  cpuValue = cpuCounter.NextValue();
  loop.Abort();

  foreach (ManagementObject obj in new ManagementObjectSearcher("SELECT *, Name FROM Win32_Processor").Get())
  {
    double maxSpeed = Convert.ToDouble(obj["MaxClockSpeed"]) / 1000;
    double turboSpeed = maxSpeed * cpuValue / 100;
    return string.Format("{0} Running at {1:0.00}Ghz, Turbo Speed: {2:0.00}Ghz",  obj["Name"], maxSpeed, turboSpeed);
  }

  return string.Empty;
}
InfiniteLop方法只是一个加1减1的整数:

private void InfiniteLoop()
{
  int i = 0;

  while (true)
    i = i + 1 - 1;
}

添加InfiniteLoop方法只是为了给CPU一些事情做,并在这个过程中加快速度。允许循环运行一秒钟,然后取下一个值并中止循环。

如果要获得涡轮转速,可以使用“%Processor Performance”性能计数器并将其与WMI“MaxClockSpeed”相乘,如下所示:

private string GetCPUInfo()
{
  PerformanceCounter cpuCounter = new PerformanceCounter("Processor Information", "% Processor Performance", "_Total");
  double cpuValue = cpuCounter.NextValue();

  Thread loop = new Thread(() => InfiniteLoop());
  loop.Start();

  Thread.Sleep(1000);
  cpuValue = cpuCounter.NextValue();
  loop.Abort();

  foreach (ManagementObject obj in new ManagementObjectSearcher("SELECT *, Name FROM Win32_Processor").Get())
  {
    double maxSpeed = Convert.ToDouble(obj["MaxClockSpeed"]) / 1000;
    double turboSpeed = maxSpeed * cpuValue / 100;
    return string.Format("{0} Running at {1:0.00}Ghz, Turbo Speed: {2:0.00}Ghz",  obj["Name"], maxSpeed, turboSpeed);
  }

  return string.Empty;
}
InfiniteLop方法只是一个加1减1的整数:

private void InfiniteLoop()
{
  int i = 0;

  while (true)
    i = i + 1 - 1;
}


添加InfiniteLoop方法只是为了给CPU一些事情做,并在这个过程中加快速度。允许循环运行一秒钟,然后取下一个值并中止循环。

您指的是哪个频率?当前的还是最大的?你指的是哪个频率?当前值或最大值?
CurrentClockSpeed
听起来像当前值,而不是最大值:)您应该使用dispose语句。使用(ManagementObject Mo=new ManagementObject(“Win32_Processor.DeviceID='CPU0')){…}@Matten只需将CurrentClockSpeed替换为MaxClockSpeed即可done@ChakerNakhli——好的,那么这是一个更好的解决方案,我不建议使用ManagementObject,因为它太慢了。它最多需要1秒,而ManagementObjectSearcher在100ms内完成同样的操作。Microsoft建议使用ManagementClass而不是ManagementObject,因为它可以解决性能问题,尽管有些问题无法解决。例如,“Win32_Processor.DeviceID='CPU0'”
CurrentClockSpeed
听起来像是当前的,而不是最大值:)您应该使用dispose语句。使用(ManagementObject Mo=new ManagementObject(“Win32_Processor.DeviceID='CPU0')){…}@Matten只需将CurrentClockSpeed替换为MaxClockSpeed即可done@ChakerNakhli——好的,那么这是一个更好的解决方案,我不建议使用ManagementObject,因为它太慢了。它最多需要1秒,而ManagementObjectSearcher在100ms内完成同样的操作。Microsoft建议使用ManagementClass而不是ManagementObject,因为它可以解决性能问题,尽管有些问题无法解决。例如,“Win32_Processor.DeviceID='CPU0'”您希望它以Ghz为单位?似乎以MHz为单位返回MaxClockSpeed数据类型:uint32访问类型:只读限定符:单位(兆赫)我这样做是为了转换它,
var clockSpeed=0.001f*(uint)项[“MaxClockSpeed”]您希望它以Ghz为单位?似乎以MHz为单位返回MaxClockSpeed数据类型:uint32访问类型:只读限定符:单位(兆赫)我这样做是为了转换它,
var clockSpeed=0.001f*(uint)项[“MaxClockSpeed”]谢谢-与CurrentClockSpeed查询不同,这实际上提供了实际的当前处理器频率。我删除InfiniteLop是因为我感兴趣的是当前状态,而不是最大可能频率谢谢-与CurrentClockSpeed查询不同,这实际上提供了实际的当前处理器频率。我删除infiniteloop是因为我对当前状态感兴趣,而不是最大可能频率