#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. Пожалуйста, обновите свой пост, чтобы включить весь код, связанный с вызовом этой функции.