我目前使用此代码获取CPU中四个核心的使用价值,并将每个核心显示在自己的标签上:
string[] cpuUsage = new string[100];
int i = 0;
//Get CPU usage values using WMI
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
foreach (ManagementObject obj in searcher.Get())
{
cpuUsage[i] = obj["PercentProcessorTime"].ToString();
i++;
}
LA_Core1.Content = "Core usage: " + cpuUsage[0] + "%";
LA_Core2.Content = "Core usage: " + cpuUsage[1] + "%";
LA_Core3.Content = "Core usage: " + cpuUsage[2] + "%";
LA_Core4.Content = "Core usage: " + cpuUsage[3] + "%";
但是,第一次运行此代码时,它会冻结我的程序大约10秒钟,然后才能显示该值。然而,在第一次过去时,代码会立即运行。这里到底发生了什么事情,使它在第一次运行时变得如此缓慢,而不是在任何后续运行中?
答案 0 :(得分:1)
当您使用WMI查询计算机上的某些内容时,它将执行该查询,并且在返回结果之前不会执行任何操作。为了防止这种情况,您可以使用多线程,这样您就可以在不将程序锁定的情况下运行查询。
至于执行查询的时间,有时发生在我身上,我只能假设本地机器缓存有一定程度的结果。因此,后续搜索会更快。您可能还会注意到,如果关闭程序并重新测试操作时间,则会刷新缓存,因此第一个查询将花费很长时间。