PdhGetFormattedCounterValue и правильный формат
Я пытаюсь понять API производительности, но у меня есть проблема, чтобы понять PdhGetFormattedCounterValue
функция и dwFormat
параметр.
Как узнать, какой формат выбрать при вызове этой функции?
Я нашел PDH_COUNTER_INFO
структура на MSDN и увидел, что эта структура имеет dwType
член, но я до сих пор не понимаю, как использовать эту структуру, чтобы получить информацию о формате счетчика для успешного вызова PdhGetFormattedCounterValue
функция.
1 ответ
Вы можете выбрать.
Многие счетчики рассчитываются как доли или они масштабируются или оба, поэтому они имеют дробные части. Что делает PDH_FMT_DOUBLE
хороший выбор.
Некоторые типы счетчиков никогда не имеют дробных частей. Вы можете прочитать всю документацию и решить, какой, а затем добавить два пути к коду для обработки "счетчиков, которые могут быть дробными" и "счетчиков, которые не будут дробными", но это будет большая работа для очень небольшого усиления или никто.
Просто используйте PDH_FMT_DOUBLE
,
Обновить
Для большинства счетчиков точность важна только при вычислении окончательного значения, которое происходит в библиотеке PDH. Но, как вы говорите, точность массовых итогов (таких как свободное место на диске) может быть проблемой. К счастью, это не так.
Двойник имеет 52 бита значения. Для счетчика, указанного в байтах, это место для 4 петабайт без потери точности.
Но свободное место на диске указывается в мегабайтах, а не в байтах, поэтому двойное число может сообщить до 272 байт или 4 зетабайт без потери точности. И я почти уверен, что у вас не может быть ни одного тома больше, чем 264 байта.
Использование памяти (процессов и т. Д.) Указывается в байтах, но значения всегда кратны размеру страницы (4096 байт), поэтому младшие 12 бит любого сообщаемого значения равны нулю. Следовательно, double может представлять объем памяти до 264 байт - т.е. всего 64-битного пространства памяти - без потери точности.
Точность не проблема. Просто используйте PDH_FMT_DOUBLE
,