ManagementObjectSearcher(«Выберите имя,количество файлов из Win32_Processor»).Get() работает очень медленно

#c# #wmi

Вопрос:

У меня есть программа, которая получает данные процессора. по какой-то причине он очень медленный и занимает до 30 секунд, чтобы закончить.

 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);
    }
 

код, вызывающий функцию

 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"))
{
    
}
 

}

Комментарии:

1. Основная проблема заключается new ManagementObjectSearcher("Select Name,NumberOfCores from Win32_Processor") в том , что вы каждый раз создаете новый экземпляр, делаете это один раз и вызываете Get() этот экземпляр объекта mos в цикле.

2. @zaggler спасибо, но это ничего не исправило. это все еще медленно, когда я создаю его в первый раз. это лучше, но все еще очень медленно, и при первом запуске мне требуется около 20-30 секунд, чтобы закончить

3. Я не могу воспроизвести проблему, у меня чуть меньше секунды, чтобы запустить и вернуться. Как ты называешь эту рутину?

4. @zaggler Я вызываю функцию, если пользователь вводит sysinfo. в дополнение к этому я отладил свой код и увидел,что мой код застрял в функции, а не в строке «foreach (var-элемент в новом файле ManagementObjectSearcher(«Выберите имя, количество файлов из Win32_Processor»).Get())» (эта строка находится в функции, которая застряла)

5. Пожалуйста, обновите свой пост, чтобы включить весь код, связанный с вызовом этой функции.