Partilhar via


Contadores de desempenho e aplicativos lado a lado em processo

Nota

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 combinar um contador de desempenho com 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 suporta 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 tempo de execução, 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 tempos de execução. Se vários aplicativos com o mesmo nome carregam vários tempos de execução, a ambiguidade é 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 tempo de execução ao nome do aplicativo na coluna Instância . Em vez de aplicativo ou aplicativo#1, o aplicativo agora é identificado como application_pprocessID_rruntimeID na coluna Instância. Se um aplicativo foi desenvolvido usando uma versão anterior do Common Language Runtime, essa instância é representada como application_pprocessID desde que o .NET Framework 4 esteja instalado.

Contadores de desempenho para aplicativos lado a lado em processo

Para manipular 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.

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

Um valor 0 for 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 da ProcessNameFormat chave do Registro não é suportado e está reservado para uso futuro.

Depois de atualizar a configuração da ProcessNameFormat chave do Registro, você deve reiniciar Perfmon.exe ou quaisquer 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 exibe os nomes dos aplicativos como application_pprocessID, onde application é o nome do aplicativo e processID é o identificador de processo do aplicativo. Por exemplo, se um aplicativo chamado myapp.exe carrega duas instâncias do common language runtime, Perfmon.exe pode identificar uma instância como myapp_1416 e a segunda como myapp_3160.

Nota

O identificador de processo elimina a ambiguidade de resolver dois aplicativos com o mesmo nome que usam versões anteriores do tempo de execução. Um identificador de tempo de execução não é necessário para versões anteriores, porque as versões anteriores do Common Language Runtime não suportam 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 no Perfmon.exe como aplicativo e aplicativo#1 (por exemplo, como myapp e myapp#1).