Contadores de desempenho e aplicativos do lado a lado em processo
Usando o Monitor de desempenho (Perfmon. exe), é possível diferenciar os contadores de desempenho em uma base por tempo de execução. Este tópico descreve a alteração de registro necessária para habilitar essa funcionalidade.
O comportamento padrão
Por padrão, o Monitor de desempenho exibe contadores de desempenho em uma base por aplicativo. No entanto, existem dois cenários em que isso é problemático:
Quando você monitorar dois aplicativos que têm o mesmo nome. Por exemplo, se ambos os aplicativos são nomeados como Myapp. exe, um será exibido como myapp e o outro como myapp # 1 na instância coluna. Nesse caso, é difícil coincidir com um contador de desempenho a um determinado aplicativo. Não está claro se os dados coletados para myapp # 1 se refere a MyApp. exe primeiro ou o segundo MyApp.
Quando um aplicativo usa várias instâncias do common language runtime. O .NET Framework versão 4 oferece suporte de cenários de hospedagem lado a lado no processo; ou seja, um único processo ou aplicativo pode carregar várias instâncias do runtime de linguagem comum. Se um único aplicativo nomeado MyApp. exe carrega duas instâncias de tempo de execução, por padrão, serão designados na instância coluna como myapp e myapp # 1. Nesse caso, não está claro se myapp e myapp # 1 consulte dois aplicativos com o mesmo nome ou o mesmo aplicativo com dois runtimes. Se vários aplicativos com o mesmo nome carregam vários tempos de execução, a ambigüidade é ainda maior.
Você pode definir uma chave do registro para eliminar essa ambigüidade. Para aplicativos desenvolvidos usando o .NET Framework 4, essa alteração no registro adiciona um identificador de processo seguido de um identificador de instância de tempo de execução para o nome do aplicativo de instância coluna. Em vez de aplicativo ou aplicativo# 1, o aplicativo agora é identificado como aplicativo_pprocessID_rruntimeID na instância coluna. Se um aplicativo foi desenvolvido usando uma versão anterior do common language runtime, essa instância é representada como aplicativo _pprocessID desde que o .NET Framework 4 está instalado.
Contadores de desempenho para aplicativos de lado a lado em processo
Para lidar com os contadores de desempenho para várias versões runtime idioma comuns que são hospedados em um único aplicativo, você deve alterar uma chave de registro único, configuração, conforme mostrado na tabela a seguir.
Nome da chave |
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance |
Nome do valor |
ProcessNameFormat |
Tipos de valor |
REG_DWORD |
Valor |
1 (0x00000001) |
Um valor 0 para ProcessNameFormat indica que o comportamento padrão é ativado; ou seja, o PerfMon. exe exibe contadores de desempenho em uma base por aplicativo. Quando você definir esse valor como 1, o PerfMon. exe retira a ambigüidade de várias versões de um aplicativo e fornece contadores de desempenho em uma base por tempo de execução. Qualquer outro valor para o ProcessNameFormat é a configuração de chave do registro uso futuro sem suporte e reservado para.
Depois de atualizar o ProcessNameFormat chave do registro definindo, você deve reiniciar Perfmon. exe ou os 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.
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()
// 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();
Quando você alterar esse registro, o PerfMon. exe exibe os nomes dos aplicativos destinados a .NET Framework 4 como aplicativo_pprocessID_rruntimeID, onde aplicativo é o nome do aplicativo, processID é o identificador de processo do aplicativo, e runtimeID é um identificador de tempo de execução de linguagem comum. Por exemplo, se um aplicativo denominado MyApp. exe carrega duas instâncias do common language runtime, o PerfMon. exe pode identificar uma instância como myapp_p1416_r10 e a segunda como myapp_p3160_r10. O identificador de tempo de execução apenas retira a ambigüidade os tempos de execução dentro de um processo; ele não fornece quaisquer outras informações sobre o tempo de execução. (Por exemplo, a identificação de tempo de execução não tem nenhuma relação com a versão ou o SKU do runtime.)
Se a .NET Framework 4 estiver instalado, a alteração do registro também afeta os aplicativos desenvolvidos com versões anteriores do.NET Framework. Elas aparecem no PerfMon. exe como aplicativo _pprocessID, onde aplicativo é o nome do aplicativo e processID é o identificador de processo. Por exemplo, se os contadores de desempenho de duas aplicações denominados MyApp. exe são monitorados, um pode aparecer como myapp_p23900 e o outro como myapp_p24908.
Observação
O identificador do processo elimina a ambigüidade de resolver dois aplicativos com o mesmo nome que usam versões anteriores do runtime.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 oferecem suporte a cenários de lado a lado.
Se a .NET Framework 4 não está presente ou foi não desinstalado, a chave do registro tem nenhum efeito. Isso significa que dois aplicativos com o mesmo nome continuará aparecem no PerfMon. exe como aplicativo e aplicativo # 1 (por exemplo, como myapp e myapp # 1).