2013-03-10 3 views
0

Я пытаюсь понять API производительности, но у меня есть проблема, чтобы понять функцию PdhGetFormattedCounterValue и параметр dwFormat.PdhGetFormattedCounterValue и правильный формат

Как узнать, какой формат выбрать при вызове этой функции?

Я нашел PDH_COUNTER_INFO структуру на MSDN и увидел, что эта структура имеет dwType член, но я до сих пор не понимаю, как использовать эту структуру, чтобы получить информацию о формате счетчика успешно вызвать функцию PdhGetFormattedCounterValue.

ответ

2

Вы можете выбрать.

Многие счетчики рассчитываются как фракции или они масштабируются или оба, поэтому они имеют дробные части. Что делает PDH_FMT_DOUBLE хорошим выбором.

Некоторые типы счетчиков никогда не имеют дробных частей. You может прочитать всю документацию и разработать, а затем добавить два пути кода, чтобы обрабатывать «счетчики, которые могут быть дробными» и «счетчики, которые не будут дробными», но это было бы очень много для очень мало или нет.

Просто используйте PDH_FMT_DOUBLE.

Update

Для большинства счетчиков точность только беспокойство при расчете окончательной стоимости, которая происходит в библиотеке PDH. Но, как вы говорите, точность массовых итогов (например, свободного места на диске) может быть проблемой. К счастью, это не так.

Двойник имеет 52 бит значимости. Для счетчика, сообщенного в байтах, у него есть место для 4 петабайт без какой-либо потери точности.

Но свободное место на диске сообщается в мегабайтах, а не в байтах, поэтому двойной может сообщать до 2 байтов или 4 зеттабайта без потери точности. И я уверен, что вы не можете иметь один том больше, чем 2 байтов.

Использование памяти (процессов и т. Д.) Сообщается в байтах, но значения всегда кратно размеру страницы (4096 байт), поэтому нижние 12 бит любого сообщенного значения равны нулю. Следовательно, double может представлять собой размер памяти до 2 байтов - то есть весь 64-разрядный объем памяти - без потери точности.

Прецизионность не является проблемой. Просто используйте PDH_FMT_DOUBLE.

+0

Привет, я думал немного о вашем комментарии, и я думаю, что у меня могут возникнуть проблемы с точностью при использовании только удвоений. На серверных системах с большим количеством ОЗУ или с большими жесткими дисками это может вызвать проблемы. – roohan

+0

Я обновил свой ответ. – arx