Поделиться через


Создание библиотеки DLL расширения производительности

Важный

Из-за значительных ограничений производительности и надежности метод предоставления данных счетчика производительности, описываемых в этом разделе, может быть изменен или недоступен в будущем. Вместо этого корпорация Майкрософт рекомендует использовать метод, описанный в разделе Предоставление данных счетчиков с помощью версии 2.0 для создания новых счетчиков производительности и переноса существующих счетчиков производительности для использования этого метода.

Поставщик версии 1 использует библиотеку DLL производительности, которая предоставляет данные счетчика потребителям. Библиотека DLL производительности должна экспортировать функции OpenPerformanceData, CollectPerformanceDataи ClosePerformanceData. Как правило, для экспорта функций из библиотеки DLL используется файл определения модуля (.def). Система вызывает эти функции, когда потребитель запрашивает данные о производительности.

При первом вызове потребителя RegQueryValueExили если потребитель использует функцию RegOpenKey или RegConnectRegistry для открытия HKEY_PERFORMANCE_DATA, система вызывает функцию OpenPerformanceData для каждого поставщика , зарегистрированного на компьютере. Исключение заключается в том, если поставщик указывает список объектов, которые он поддерживает, в разделе [objects] INI-файла. В этом случае система вызывает поставщика только в том случае, если один из запрашиваемых объектов соответствует объекту из списка.

Функция OpenPerformanceData предоставляет каждому поставщику возможность инициализировать структуры данных производительности. Затем, если функция OpenPerformanceData завершится успешно, система вызывает функцию CollectPerformanceData от поставщика. Последующие вызовы RegQueryValueEx приводят к тому, что система вызывает функцию CollectPerformanceData.

Когда потребитель завершит сбор данных о производительности, он указывает HKEY_PERFORMANCE_DATA в вызове функции RegCloseKey. Это приводит к тому, что система вызывает функцию ClosePerformanceData для каждого поставщика. Затем поставщиков выгружают.

Для нескольких потребителей можно одновременно собирать данные о производительности. Система вызывает OpenPerformanceData и closePerformanceData функции только один раз при каждой загрузке или выгрузке библиотеки DLL.

Заметка

Не забудьте включить extern "C" в код C++, чтобы предотвратить добавление декораций в имена ваших функций компилятором; в противном случае система может не найти ваши функции.

Заметка

Если возникает ошибка при загрузке связанной с производительностью библиотеки DLL, поиске функций или вызове функций, система отключит поставщика для последующих коллекций в рамках того же процесса. Кроме того, если это происходит при выполнении в привилегированном процессе, система добавляет значение Отключить счетчики производительности к вашему ключу производительности, чтобы предотвратить загрузку поставщика в будущем.

Для получения дополнительной информации о написании DLL производительности см. следующие разделы: