Вызов LoadPercentage WMI очень медленный - PullRequest
0 голосов
/ 29 марта 2011

Я пытаюсь использовать WMI для проверки загрузки моего процессора (Xeon, 4 ядра).Я использую XP 64 (SP2).

private void button1_Click(object sender, EventArgs e)
    {
        Dictionary<string, string> cpuInfo = new Dictionary<string, string>();


        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");

        foreach (ManagementObject queryObj in searcher.Get())
        {
            cpuInfo.Add("LoadPercentage"+queryObj["DeviceID"].ToString(), queryObj["LoadPercentage"].ToString());
        }

        foreach (KeyValuePair<string,string> kvp in cpuInfo)
        {
            richTextBox1.AppendText(String.Format("{0} {1}\n", kvp.Key, kvp.Value));
        }
    }

Приведенный выше пример работает, но очень медленно, около 5 секунд.Это проблема WMI или я делаю что-то в корне неправильно?

1 Ответ

0 голосов
/ 07 октября 2011

Хорошо, я даю это как ответ, хотя это может и не быть - тем не менее я считаю, что это не подходит для одного комментария.

У меня та же проблема с Windows XP SP3 и Windows 7. Как только я включаю свойство LoadPercentage в запрос WMI, оно запускается примерно на 1 секунду на физический процессор (т.е. экземпляр Win32_Processor). Верно и обратное: если я включаю все свойства в запрос, но не включаю свойство LoadPercentage, он выполняется за пару миллисекунд.

Такое поведение наблюдается при использовании нескольких инструментов, пользовательских или ОС (т. Е. wmic cpu).

Я могу только предположить, в чем причина, это может быть связано с определением из LoadPercentage (выделение добавлено):

Нагрузочная способность каждого процессора, усредненная до в последнюю секунду . Загрузка процессора относится к общей вычислительной нагрузке для каждого процессор за один раз. Это свойство унаследовано от CIM_Processor.

Реализации поставщика WMI может фактически потребоваться эта 1 секунда для выборки процента загрузки, «усредненного по последней секунде» во время выполнения вызова. Я бы догадался, что провайдер как-то делает это в фоновом режиме и возвращает только то, что у него есть во время звонка. Но в любом случае, это всего лишь предположение.

ОБНОВЛЕНИЕ : FWIW, предварительный просмотр Windows 8 Developer, похоже, показывает то же поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...