Compartilhar via


Contadores de desempenho e aplicativos lado a lado em processo

Observação

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

Usando o Monitor de Desempenho (Perfmon.exe), é possível diferenciar os contadores de desempenho por tempo de execução. Este tópico descreve a alteração do Registro necessária para habilitar essa funcionalidade.

O comportamento padrão

Por padrão, o Monitor de Desempenho exibe contadores de desempenho por aplicativo. No entanto, há dois cenários em que isso é problemático:

  • Quando você monitora dois aplicativos que têm o mesmo nome. Por exemplo, se ambos os aplicativos forem nomeados myapp.exe, um será exibido como myapp e o outro como myapp#1 na coluna Instância . Nesse caso, é difícil corresponder um contador de desempenho a um aplicativo específico. Não está claro se os dados coletados para myapp#1 se referem ao primeiro myapp.exe ou ao segundo myapp.exe.

  • Quando um aplicativo usa várias instâncias do common language runtime. O .NET Framework 4 dá suporte a cenários de hospedagem lado a lado em processo; ou seja, um único processo ou aplicativo pode carregar várias instâncias do common language runtime. Se um único aplicativo chamado myapp.exe carregar duas instâncias de runtime, por padrão, elas serão designadas na coluna Instância como myapp e myapp#1. Nesse caso, não está claro se myapp e myapp#1 se referem a dois aplicativos com o mesmo nome ou ao mesmo aplicativo com dois runtimes. Se vários aplicativos com o mesmo nome carregarem vários runtimes, a ambiguidade será ainda maior.

Você pode definir uma chave do Registro para eliminar essa ambiguidade. Para aplicativos desenvolvidos usando o .NET Framework 4, essa alteração do Registro adiciona um identificador de processo seguido por um identificador de instância de runtime ao nome do aplicativo na coluna Instância . Em vez de aplicativo ou aplicativo nº 1, o aplicativo agora é identificado como application_pprocessID_rruntimeID na coluna Instância . Se um aplicativo tiver sido desenvolvido usando uma versão anterior do common language runtime, essa instância será representada como application_pprocessID , desde que o .NET Framework 4 esteja instalado.

Contadores de desempenho para aplicativos lado a lado em processo

Para lidar com contadores de desempenho para várias versões de common language runtime hospedadas em um único aplicativo, você deve alterar uma única configuração de chave do Registro, conforme mostrado na tabela a seguir.

Valor
Chave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
de Entrada ProcessNameFormat
Tipo REG_DWORD
Valor 2 (0x00000002)

Um valor de 0 para ProcessNameFormat indica que o comportamento padrão está habilitado; ou seja, Perfmon.exe exibe contadores de desempenho por aplicativo. Quando você define esse valor como 2, Perfmon.exe desambigua várias versões de um aplicativo e fornece contadores de desempenho por tempo de execução. Qualquer outro valor para a configuração de chave do ProcessNameFormat Registro não tem suporte e é reservado para uso futuro.

Depois de atualizar a configuração da chave do Registro ProcessNameFormat, você deve reiniciar Perfmon.exe ou outros consumidores de contadores de desempenho para que o novo recurso de nomeação de instância funcione corretamente.

O exemplo a seguir mostra como alterar o ProcessNameFormat valor programaticamente.

// Create or open registry key.
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(
          @"System\CurrentControlSet\Services\.NETFramework\Performance");
// Create or overwrite value.
key.SetValue("ProcessNameFormat", 1,
             Microsoft.Win32.RegistryValueKind.DWord);
key.Close();
' Create or open registry key.
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey( _
            "System\CurrentControlSet\Services\.NETFramework\Performance")
' Create or overwrite value.
key.SetValue("ProcessNameFormat", 1, _
             Microsoft.Win32.RegistryValueKind.DWord)
key.Close()

Quando você faz essa alteração do Registro e, se o .NET Framework 4 ou posterior estiver instalado, Perfmon.exe exibirá os nomes dos aplicativos como application_pprocessID, em que o aplicativo é o nome do aplicativo e processID é o identificador de processo do aplicativo. Por exemplo, se um aplicativo chamado myapp.exe carregar duas instâncias do common language runtime, Perfmon.exe poderá identificar uma instância como myapp_1416 e a segunda como myapp_3160.

Observação

O identificador de processo elimina a ambiguidade de resolver dois aplicativos com o mesmo nome que usam versões anteriores do runtime. Um identificador de runtime não é necessário para versões anteriores, pois as versões anteriores do common language runtime não dão suporte a cenários lado a lado.

Se o .NET Framework 4 ou uma versão posterior não estiver presente ou tiver sido desinstalado, a configuração da chave do Registro não terá efeito. Isso significa que dois aplicativos com o mesmo nome continuarão a aparecer em Perfmon.exe como aplicativo e aplicativo nº 1 (por exemplo, como myapp e myapp#1).