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