Partilhar via


Usando as funções do Registro para consumir dados de contador

Use as funções do Registro para coletar dados de desempenho da chave especial HKEY_PERFORMANCE_DATA do Registro.

Os dados de desempenho não são realmente armazenados no registro. Chamar as funções do Registro faz com que o sistema colete os dados do provedor de dados de desempenho apropriado.

Observação

Normalmente, você não deve usar as funções do Registro para consumir dados de contador. Em vez disso, você deve usar as funções PDH (Auxiliar de Dados de Desempenho). As funções PDH são mais fáceis de usar e evitam muitos problemas de desempenho e confiabilidade que podem ocorrer por meio do uso incorreto das funções do Registro.

Observação

Você não poderá usar as funções do Registro se estiver escrevendo Windows OneCore aplicativos. Em vez disso, use funções de consumidor PerfLib V2.

As funções do Registro são a API de baixo nível para coletar dados de provedores V1. As funções do Registro também dão suporte à coleta de dados de provedores V2 por meio de uma camada de tradução que chama as funções de Consumidor V2.

Para obter dados de desempenho do sistema local, chame a função RegQueryValueEx . Use HKEY_PERFORMANCE_DATA como a chave. A primeira chamada abre a chave. Você não precisa abrir explicitamente a chave primeiro.

Para obter dados de desempenho de um sistema remoto, chame a função RegConnectRegistry . Use o nome do computador do sistema remoto e use HKEY_PERFORMANCE_DATA como a chave. Essa chamada recupera uma chave que representa os dados de desempenho do sistema remoto. Use essa chave em vez de HKEY_PERFORMANCE_DATA chave para recuperar os dados.

Use a função RegCloseKey para fechar o identificador da chave quando terminar de obter os dados de desempenho. Isso é importante para os casos locais e remotos:

  • RegCloseKey(HKEY_PERFORMANCE_DATA) na verdade, não fecha um identificador do Registro, mas limpa todos os dados armazenados em cache e libera as DLLs de desempenho carregadas.
  • RegCloseKey(hkeyRemotePerformanceData) fecha o identificador para o registro do computador remoto.

Importante

Não chame RegCloseKey(HKEY_PERFORMANCE_DATA) durante DLL_PROCESS_DETACH.

Use o lpValueName parâmetro da função RegQueryValueEx para indicar as informações a serem recuperadas. A tabela a seguir lista os valores que você pode especificar para lpValueName. Observe que as cadeias de caracteres de valor não diferenciam maiúsculas de minúsculas.

Valor Descrição
Global Recupera dados de desempenho para todos os objetos de desempenho registrados no computador, exceto aqueles incluídos na Costly categoria.
OLD_Global Windows Vista e posterior: Recupera dados de desempenho para todos os objetos de desempenho V1 registrados no computador, exceto aqueles incluídos na Costly categoria. Use isso em vez de para evitar coletar dados desnecessários do Global provedor V2 quando souber que os dados de interesse vêm de um provedor V1.
n1 n2 ... Recupera dados de desempenho para um ou mais objetos de desempenho. Especifique o índice decimal associado a cada objeto que você deseja recuperar em uma lista separada por espaço. Por exemplo, se você quiser recuperar objetos System e Memory e tiver determinado que os índices das cadeias de caracteres de nome correspondentes são 2 e 4, especifique a cadeia de caracteres "2 4". Observe que a consulta pode retornar um número diferente de objetos que você solicitou. Isso pode acontecer se o objeto especificado não estiver disponível, se o objeto especificado depender de outro tipo de objeto ou se um provedor retornar dados que não foram solicitados diretamente. Por exemplo, os threads dependem de processos, portanto, se você solicitar dados do Thread objeto, os resultados incluirão dados do Process objeto .
Counter n Recupera cadeias de caracteres de nome para o identificador de idioma especificado, por exemplo, inglês para Counter 9. Use as cadeias de caracteres de nome retornadas para localizar o índice correspondente a um determinado nome ou para localizar o nome correspondente a um determinado índice. Consulte Recuperando nomes de contador e texto de ajuda para obter detalhes. Observe que a lista retornada inclui nomes de objeto (contador) e nomes de contador – não há uma maneira simples de determinar se um nome é um nome de objeto ou um nome de contador.
Help n Recupera cadeias de caracteres de ajuda para o identificador de idioma especificado, por exemplo, inglês para Help 9. Use as cadeias de caracteres de ajuda retornadas para encontrar descrições correspondentes a índices de ajuda de objeto (contador) ou contador. Consulte Recuperando nomes de contador e texto de ajuda para obter detalhes.
Costly Preterido: Recupera dados de desempenho para tipos de objeto cujos dados são caros de coletar em termos de tempo de processador ou uso de memória. Essa coleção pode levar vários minutos em um computador carregado. Você deverá executar a coleção em um thread de trabalho se o aplicativo precisar responder ao usuário durante essa coleta de dados.
MetadataGlobal Windows 10 20H1 e posterior: Recupera metadados para todos os objetos de desempenho registrados no computador, exceto aqueles incluídos na Costly categoria.
OLD_MetadataGlobal Windows 10 20H1 e posterior: Recupera metadados para todos os objetos de desempenho V1 registrados no computador, exceto aqueles incluídos na Costly categoria.
MetadataCostly Windows 10 20H1 e posterior: Recupera metadados para objetos de desempenho caros.
OLD_MetadataCostly Windows 10 20H1 e posterior: Recupera metadados para objetos de desempenho V1 caros.

Para obter detalhes sobre o formato dos dados de desempenho que o registro retorna, consulte Formato de dados de desempenho.

Para obter um exemplo que obtém os nomes e descrições dos contadores registrados no computador, consulte Recuperando nomes de contador e texto de ajuda.

Para obter um exemplo que acessa os componentes dos dados de desempenho, consulte Exibindo nomes de objeto, instância e contador.

Para obter um exemplo que recupera, calcula e imprime valores de contador, consulte Recuperando dados de contador e calculando valores de contador.

Coleção de metadados

O Windows 10 20H1 adiciona suporte para operações de coleção somente de metadados. Essas operações destinam-se a ser usadas ao fazer uma lista dos objetos e contadores de desempenho disponíveis em um computador.

  • A coleção somente de metadados pode ser mais rápida do que a coleta de dados completos correspondente, pois pode ignorar a coleta de dados de instância de objetos que dão suporte à coleção somente de metadados.
  • A coleção somente metadados usa menos memória do que a coleção de dados completos correspondente porque não precisa de espaço para retornar dados de instância de objetos que dão suporte à coleção somente metadados.
  • A coleção somente metadados é mais completa do que a coleção de dados completos correspondente porque retorna a lista de contadores disponíveis mesmo que não haja instâncias de objetos que dão suporte à coleção somente de metadados.

Dica

O uso apropriado da coleção somente de metadados é especialmente importante ao coletar dados de servidores com muitos processos ou threads. Uma coleção normal Global deve coletar e retornar informações sobre cada processo e thread no sistema, enquanto MetadataGlobal a coleção não precisa coletar informações de processo ou thread.

As funções PDH (Performance Data Helper) usam automaticamente a coleção somente metadados ao determinar o conjunto de objetos de desempenho disponíveis em um computador.

O suporte do sistema operacional para operações somente metadados é indicado por um valor diferente de zero no valor do HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata Registro. Se esse valor não estiver presente ou estiver definido como 0, use uma coleção de dados completos (por exemplo, Global) em vez de uma coleção somente de metadados (por exemplo, MetadataGlobal).

Nem todos os objetos de desempenho dão suporte à coleção somente de metadados. Quando você solicita uma MetadataGlobal coleção, o Windows marcar cada objeto de desempenho para suporte somente a metadados (indicado por um valor diferente de zero no valor do HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata Registro). Se o objeto de desempenho não der suporte à coleção somente de metadados, o Windows executará uma coleta de dados normal do objeto. Se o objeto de desempenho der suporte à coleção somente metadados, o Windows executará uma coleção somente de metadados do objeto . Os dados retornados a você para uma consulta somente de metadados conterão PERF_OBJECT_TYPE blocos da coleção somente de dados completos e metadados. Os PERF_OBJECT_TYPE blocos podem conter ou omitir informações de instância, dependendo se o bloco foi coletado de um provedor que oferece ou não suporte a consultas somente de metadados.

Os dados retornados de uma coleção somente de metadados são os mesmos de uma coleção normal, exceto:

  • O NumInstances campo do PERF_OBJECT_TYPE struct será PERF_METADATA_MULTIPLE_INSTANCES (indicando que o objeto dá suporte a 0 ou mais instâncias nomeadas) ou PERF_METADATA_NO_INSTANCES (indicando que o objeto sempre tem uma instância sem nome).
  • Não haverá PERF_INSTANCE_DEFINITION blocos após o PERF_OBJECT_TYPE struct.

Perflib

A HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib chave do Registro dá suporte a vários DWORD valores relacionados à coleção de contadores de desempenho. Geralmente, eles devem ser não definidos para o comportamento padrão, mas podem ser configurados por um administrador conforme necessário para cenários específicos.

  • Configuration Flags: o padrão é 0. Pode ser definido como uma combinação dos seguintes sinalizadores para habilitar o comportamento especial:
    • 0x01: não teste plug-ins para erros de alinhamento do buffer de dados. Por padrão, o sistema valida o alinhamento do buffer de plug-ins.
    • 0x02: não desabilite automaticamente plug-ins. Por padrão, o sistema desabilita plug-ins que falham ou exibem um comportamento incorreto.
    • 0x04: não valide a integridade do buffer do plug-in. Por padrão, o sistema verifica se há estouros de buffer de plug-in.
    • 0x08: não marcar para tempos limite de plug-in. Por padrão, o sistema verifica se há travamentos de plug-in.
  • Disable Performance Counters: o padrão é 0. Se definido como 1, a coleção de contadores de desempenho V1 será desabilitada para o sistema.
  • ExtCounterTestLevel: o padrão é 4. Controla a quantidade de validação que o sistema executa para proteger contra o comportamento incorreto do plug-in. Para obter detalhes, consulte PM_COLLECT_PROC.