Использование функций реестра для использования данных счетчиков

Используйте функции реестра для сбора данных о производительности из специального HKEY_PERFORMANCE_DATA раздела реестра.

Данные о производительности фактически не хранятся в реестре. Вызов функций реестра приводит к тому, что система собирает данные от соответствующего поставщика данных о производительности.

Примечание

Обычно не следует использовать функции реестра для использования данных счетчиков. Вместо этого следует использовать функции вспомогательного средства данных о производительности (PDH). Функции PDH проще в использовании и позволяют избежать многих проблем с производительностью и надежностью, которые могут возникнуть из-за неправильного использования функций реестра.

Примечание

При написании Windows OneCore приложений нельзя использовать функции реестра. Вместо этого используйте функции потребителя PerfLib версии 2.

Функции реестра — это низкоуровневый API для сбора данных от поставщиков версии 1. Функции реестра также поддерживают сбор данных от поставщиков версии 2 с помощью уровня преобразования, который вызывает функции потребителей версии 2.

Чтобы получить данные о производительности из локальной системы, вызовите функцию RegQueryValueEx . Используйте HKEY_PERFORMANCE_DATA в качестве ключа. При первом вызове открывается ключ. Сначала явно открывать ключ не нужно.

Чтобы получить данные о производительности из удаленной системы, вызовите функцию RegConnectRegistry . Используйте имя компьютера удаленной системы и в HKEY_PERFORMANCE_DATA качестве ключа. Этот вызов извлекает ключ, представляющий данные о производительности для удаленной системы. Используйте этот ключ вместо HKEY_PERFORMANCE_DATA ключа для получения данных.

Не забудьте использовать функцию RegCloseKey , чтобы закрыть дескриптор ключа после завершения получения данных о производительности. Это важно как для локальных, так и для удаленных вариантов:

  • RegCloseKey(HKEY_PERFORMANCE_DATA) фактически не закрывает дескриптор реестра, но очищает все кэшированные данные и освобождает загруженные библиотеки DLL производительности.
  • RegCloseKey(hkeyRemotePerformanceData) закрывает дескриптор в реестре удаленного компьютера.

Важно!

Не вызывайте во RegCloseKey(HKEY_PERFORMANCE_DATA) время DLL_PROCESS_DETACH.

Чтобы указать извлекаемую информацию, используйте lpValueName параметр функции RegQueryValueEx . В следующей таблице перечислены значения, которые можно указать для lpValueName. Обратите внимание, что в строках значений регистр не учитывается.

Значение Описание
Global Извлекает данные о производительности для всех объектов производительности, зарегистрированных на компьютере, за исключением объектов, включенных в категорию Costly .
OLD_Global Windows Vista и более поздних версий: Извлекает данные о производительности для всех объектов производительности версии 1, зарегистрированных на компьютере, за исключением объектов, включенных в категорию Costly . Используйте его вместо Global , чтобы избежать сбора ненужных данных поставщика версии 2, если вы знаете, что интересующие данные поступают от поставщика версии 1.
n1 n2 ... Извлекает данные о производительности для одного или нескольких объектов производительности. Укажите десятичный индекс, связанный с каждым объектом, который требуется извлечь в разделенном пробелом списке. Например, если вы хотите получить объекты System и Memory и определили, что индексы соответствующих строк имен — 2 и 4, укажите строку "2 4". Обратите внимание, что запрос может возвращать другое количество объектов, чем запрошено. Это может произойти, если указанный объект недоступен, если указанный объект зависит от другого типа объекта или если поставщик в противном случае возвращает данные, которые не были запрошены напрямую. Например, потоки зависят от процессов, поэтому при запросе Thread данных из объекта результаты будут включать данные из Process объекта .
Counter n Извлекает строки имен для указанного идентификатора языка, например английский для Counter 9. Возвращаемые строки имен используются для поиска индекса, соответствующего заданному имени, или для поиска имени, соответствующего заданному индексу. Дополнительные сведения см. в разделе Получение имен счетчиков и текст справки . Обратите внимание, что возвращенный список содержит как имена объектов (счетчиков), так и имена счетчиков. Простого способа определить, является ли имя объектом или именем счетчика, простого способа не существует.
Help n Извлекает строки справки для указанного идентификатора языка, например английский для Help 9. Используйте возвращенные строки справки для поиска описаний, соответствующих индексам справки объекта (набора счетчиков) или счетчика. Дополнительные сведения см. в разделе Получение имен счетчиков и текст справки .
Costly Устаревшие: Извлекает данные о производительности для типов объектов, сбор данных которых требует больших затрат с точки зрения времени процессора или использования памяти. Эта коллекция может занять несколько минут на сильно загруженном компьютере. Необходимо выполнить сбор в рабочем потоке, если приложение должно отвечать пользователю во время сбора данных.
MetadataGlobal Windows 10 20H1 и более поздних версий: Извлекает метаданные для всех объектов производительности, зарегистрированных на компьютере, за исключением объектов, включенных в категорию Costly .
OLD_MetadataGlobal Windows 10 20H1 и более поздних версий: Извлекает метаданные для всех объектов производительности версии 1, зарегистрированных на компьютере, за исключением объектов, включенных в категорию Costly .
MetadataCostly Windows 10 20H1 и более поздних версий: Извлекает метаданные для дорогостоящих объектов производительности.
OLD_MetadataCostly Windows 10 20H1 и более поздних версий: Извлекает метаданные для дорогостоящих объектов производительности версии 1 .

Дополнительные сведения о формате данных о производительности, возвращаемых реестром, см. в разделе Формат данных о производительности.

Пример получения имен и описаний зарегистрированных счетчиков на компьютере см. в разделе Получение имен счетчиков и текста справки.

Пример доступа к компонентам данных о производительности см. в разделе Отображение имен объектов, экземпляров и счетчиков.

Пример получения, вычисления и печати значений счетчиков см. в разделах Получение данных счетчика и Вычисление значений счетчика.

Коллекция метаданных

В Windows 10 20H1 добавлена поддержка операций сбора только метаданных. Эти операции предназначены для использования при создании списка объектов производительности и счетчиков, доступных на компьютере.

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

Совет

Надлежащее использование сбора только метаданных особенно важно при сборе данных с серверов с большим количеством процессов или потоков. Обычная Global коллекция должна собирать и возвращать сведения о каждом процессе и потоке в системе, в то время как MetadataGlobal сбору данных о процессе или потоке не требуется.

Функции вспомогательного средства данных о производительности (PDH) автоматически используют коллекцию только метаданных при определении набора объектов производительности, доступных на компьютере.

Поддержка операционной системы для операций только с метаданными обозначается ненулевым значением в значении HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata реестра. Если это значение отсутствует или имеет значение 0, используйте полную коллекцию данных (например, Global) вместо коллекции только метаданных (например, MetadataGlobal).

Не все объекты производительности поддерживают сбор только метаданных. При запросе MetadataGlobal коллекции Windows будет проверка каждый объект производительности для поддержки только метаданных (обозначается ненулевым значением в значении HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata реестра). Если объект производительности не поддерживает сбор только метаданных, Windows будет выполнять обычный сбор данных из объекта . Если объект производительности поддерживает сбор только метаданных, Windows выполнит сбор только метаданных из объекта . Данные, возвращаемые для запроса только для метаданных, будут содержать PERF_OBJECT_TYPE блоки из коллекции полных данных и только для метаданных. Блоки PERF_OBJECT_TYPE могут содержать или пропускать сведения об экземпляре в зависимости от того, был ли блок собран поставщиком, который поддерживает или не поддерживает запросы только метаданных.

Данные, возвращаемые из коллекции, доступной только для метаданных, совпадают с данными из обычной коллекции, за исключением:

  • Поле NumInstancesPERF_OBJECT_TYPE структуры будет иметь значение PERF_METADATA_MULTIPLE_INSTANCES (указывающее, что объект поддерживает 0 или более именованных экземпляров) или PERF_METADATA_NO_INSTANCES (указывает, что объект всегда имеет 1 неименованный экземпляр).
  • После структуры не PERF_INSTANCE_DEFINITION будет блоков PERF_OBJECT_TYPE .

Perflib

Раздел HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib реестра поддерживает несколько DWORD значений, связанных со сбором счетчиков производительности. Обычно они должны быть не заданы для поведения по умолчанию, но могут быть настроены администратором по мере необходимости для конкретных сценариев.

  • Configuration Flags: значение по умолчанию — 0. Для включения особого поведения может быть задано сочетание следующих флагов:
    • 0x01: не проверяйте подключаемые модули на наличие ошибок выравнивания буфера данных. По умолчанию система проверяет выравнивание буфера подключаемых модулей.
    • 0x02: не отключайте подключаемые модули автоматически. По умолчанию система отключает подключаемые модули, которые завершают работу или демонстрируют неправильное поведение.
    • 0x04: не проверяйте целостность буфера подключаемого модуля. По умолчанию система проверяет переполнение буфера подключаемого модуля.
    • 0x08: не проверка для времени ожидания подключаемого модуля. По умолчанию система проверяет, зависает ли подключаемый модуль.
  • Disable Performance Counters: значение по умолчанию — 0. Если задано значение 1, сбор счетчиков производительности версии 1 будет отключен для системы.
  • ExtCounterTestLevel: значение по умолчанию — 4. Определяет, сколько проверок система выполняет для защиты от неправильного поведения подключаемого модуля. Дополнительные сведения см. в разделе PM_COLLECT_PROC.