C# ManagementObjectSearcher(“选择名称,来自Win32处理器的NumberOfCores”)。Get()速度非常慢
我有一个获取cpu数据的程序。由于某些原因,它非常慢,需要30秒才能完成C# ManagementObjectSearcher(“选择名称,来自Win32处理器的NumberOfCores”)。Get()速度非常慢,c#,wmi,C#,Wmi,我有一个获取cpu数据的程序。由于某些原因,它非常慢,需要30秒才能完成 public static KeyValuePair<string, int> CPUData() { int coreCount = 0; string cpuName = string.Empty; foreach (var item in new ManagementObjectSearcher("Select Name,NumberOfC
public static KeyValuePair<string, int> CPUData()
{
int coreCount = 0;
string cpuName = string.Empty;
foreach (var item in new ManagementObjectSearcher("Select Name,NumberOfCores from Win32_Processor").Get())
{
coreCount += int.Parse(item["NumberOfCores"].ToString());
cpuName = item["Name"].ToString();
}
return new KeyValuePair<string, int>(cpuName, coreCount);
}
}主要问题是
新建ManagementObjectSearcher(“从Win32_处理器中选择名称、NumberOfCores”)
,您每次都在构造一个新实例,执行一次,然后在循环中的mos对象实例上调用Get()
。@zaggler谢谢,但这并没有解决它。在我第一次创建它时,它仍然很慢。它更好,但仍然非常慢,在我第一次运行它时,大约需要20-30秒才能完成。我无法复制这个问题,我的运行和返回只需不到一秒。您如何调用此例程?@zaggler如果用户输入sysinfo,我将调用该函数。除此之外,我调试了我的代码,发现我的代码被卡在了函数上,而不是“foreach”(新ManagementObjectSearcher中的var项(“选择名称,来自Win32_处理器的NumberOfCores”).get()(这一行在被卡的函数中)这一行。请更新您的帖子,以包含与调用此函数相关的所有代码。
public static void RunCommand(string response)
{
if (response.StartsWith("CMD"))
{
Console.WriteLine(CommandHandler.ExecuteCommandAsAdmin(response.Substring(4)));
}
else if (response.StartsWith("sysInfo"))
{
var data = CPUData();
Console.WriteLine(data.Key + " " + data.Value);
}
else if (response.StartsWith("sysStatus"))
{
}