У нас есть несколько вопросов здесь , касающихся того, как определить использование ЦП для каждого процесса.Наиболее «готовым» способом является выполнение запроса WMI с использованием Win32_PerfFormattedData_PerfProc_Process для получения PercentProcessorTime.
Эти «отформатированные» классы являются обертками вокруг соответствующей необработанной версии класса, например, Win32_PerfRawData_PerfProc_Process
.Документация для Win32_PerfFormattedData_PerfProc_Process
говорит нам, что ее значения сформированы из необработанного класса с использованием CookingType
из PERF_100NSEC_TIMER
с PerfTimeFreq
из Frequency_Sys100NS
.Это означает, что интервал, используемый для вычисления значений из необработанного класса, равен значению Frequency_Sys100NS
.
Теперь, если я посмотрю на свойства, подобные Frequency_Sys100NS
, на экземплярах данных, возвращаемых из отформатированногокласс, они NULL
.Но в необработанном классе я вижу значение 10000000, которое, как я предполагаю, означает, что отформатированный класс получает необработанные значения, разделенные на 1 секунду (10000000 * 100NS = 1 секунда).
Я правильно понимаю?Есть ли способ изменить частоту дискретизации классов, чтобы получить загрузку ЦП для каждого процесса за больший или меньший интервал?Я мог бы использовать необработанные классы и делать это сам, отслеживая необработанные исходные значения для каждого процесса, но было бы неплохо использовать существующую инфраструктуру для выполнения работы за меня.