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,

Другие вопросы по тегам