C# 为什么使用WMI获取CPU使用率会将我的程序冻结几秒钟?

C# 为什么使用WMI获取CPU使用率会将我的程序冻结几秒钟?,c#,wmi,C#,Wmi,我目前使用此代码获取CPU中四个核心的使用值,并将每个核心显示在各自的标签上: string[] cpuUsage = new string[100]; int i = 0; //Get CPU usage values using WMI ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from

我目前使用此代码获取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秒钟,然后才最终显示值。然而,在第一次之后,代码几乎立即运行。在第一次运行时,到底是什么使它如此缓慢,而不是在任何后续运行时?

当您使用WMI在计算机上查询某些内容时,它将执行该查询,并且在返回结果之前不会执行任何操作。为了防止这种情况,您可以利用多线程,这样就可以运行查询,而无需将程序与其他任何程序锁定


至于执行查询的时间(有时会发生在我身上),我只能假设本地机器在一定程度上缓存了结果。因此,后续搜索将更快。您可能还注意到,如果关闭程序并重新测试操作时间,缓存将被刷新,因此第一次查询将再次花费很长时间。

我明白了。。。这有点痛。不过,谢谢你的知识!谢谢。我确实看到了这样的延误。不可能搞定,但是,它重复得太差了。换个角度考虑一下,我想我可以,干杯。