当前正在使用c#/ wpf创建一种“任务管理器”。我已经搜索了一下,但是没有找到解决问题的方法。
我正在尝试检索一个人的CPU的当前时钟速度(不是利用率,基准,最小/最大)。我尝试使用ManagementObjects,但是“ CurrentClockSpeed”始终提供3400或3.4GHz的固定值,这是CPU的最大存储速度。我已经尝试了很多次,它给了我相同的答案,所以我认为这不仅仅是巧合。
ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
uint sp = (uint)(Mo["CurrentClockSpeed"]);
System.Threading.Thread.Sleep(1000);
sp = (uint)(Mo["CurrentClockSpeed"]);
Mo.Dispose(); //return and such later in the code
任何有关解决此问题的建议(我不限于使用ManagementObjects,我具有OpenHardwareMonitor,并且可以根据需要使用其他软件包)。
答案 0 :(得分:1)
在WMI对象上, MaxClockSpeed 属性为您提供核心的最大速度,该速度应保持恒定。 CurrentClockSpeed 属性可告诉您当前的时钟速度。由于CPU节流,这可能比 MaxClockSpeed 少。
我相信您可以在BIOS级别或通过Windows电源管理控制面板小程序禁用限制,因此* CurrentClockSpeed **可能始终与 MaxClockSpeed 相同。
答案 1 :(得分:0)
在可以访问MSR的Intel CPU上运行代码时,您可以从IA32_MPERF (0xE7)
TSC频率时钟计数器和
IA32_APERF (0xE8)
实际性能时钟计数器。
aperf_t1 = read_aperf();
mperf_t1 = read_mperf();
sleep(1);
aperf_t2 = read_aperf();
mperf_t2 = read_mperf();
printf("CPU freq: %f [Hz]\n", ((aperf_t2-aperf_t1) / (double)(mperf_t2-mperf_t1)) * nominal_freq);