Contadores de rendimiento y aplicaciones en paralelo en proceso
Nota:
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluido .NET 6 y versiones posteriores.
Con el Monitor de rendimiento (Perfmon.exe), es posible diferenciar los contadores de rendimiento por tiempo de ejecución. En este tema se describe el cambio del Registro necesario para habilitar esta funcionalidad.
El comportamiento predeterminado
De forma predeterminada, el Monitor de rendimiento muestra los contadores de rendimiento según cada aplicación. Pero hay dos escenarios en los que esto es problemático:
Al supervisar dos aplicaciones que tienen el mismo nombre. Por ejemplo, si ambas aplicaciones se denominan myapp.exe, una se mostrará como myapp y la otra como myapp#1 en la columna Instance. En este caso, es difícil que un contador de rendimiento coincida con una aplicación determinada. No está claro si los datos recopilados para myapp#1 hacen referencia a la primera myapp.exe o a la segunda.
Cuando una aplicación usa varias instancias de Common Language Runtime. .NET Framework 4 admite escenarios de hospedaje en paralelo dentro de proceso; es decir, un único proceso o aplicación puede cargar varias instancias de Common Language Runtime. Si una aplicación denominada myapp.exe carga dos instancias de tiempo de ejecución, se designarán en la columna Instance como myapp y myapp#1 de forma predeterminada. En este caso, no está claro si myapp y myapp#1 hacen referencia a dos aplicaciones con el mismo nombre, o a la misma aplicación con dos tiempos de ejecución. Si varias aplicaciones con el mismo nombre cargan varios tiempos de ejecución, la ambigüedad es incluso mayor.
Puede establecer una clave del Registro para eliminar esta ambigüedad. Para las aplicaciones desarrolladas mediante .NET Framework 4, este cambio del registro agrega un identificador de proceso seguido de un identificador de instancia de runtime para el nombre de la aplicación en la columna Instancia. En lugar de la aplicación o la aplicación#1, la aplicación ahora se identifica como application_p
processID_r
runtimeID en la columna Instancia. Si una aplicación se desarrolló con una versión anterior de Common Language Runtime, esa instancia se representa como application_p
processID siempre que .NET Framework 4 esté instalado.
Contadores de rendimiento para aplicaciones en paralelo en proceso
Para administrar los contadores de rendimiento para varias versiones de Common Language Runtime que se hospedan en una sola aplicación, debe cambiar una única clave del Registro, como se muestra en la tabla siguiente.
Valor | |
---|---|
Clave | HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance |
Entrada | ProcessNameFormat |
Tipo | REG_DWORD |
Valor | 2 (0x00000002) |
Un valor de 0 para ProcessNameFormat
indica que el comportamiento predeterminado está habilitado; es decir, Perfmon.exe muestra los contadores de rendimiento según cada aplicación. Cuando este valor se establece en 2, Perfmon.exe elimina la ambigüedad de varias versiones de una aplicación y proporciona contadores de rendimiento según cada runtime. Cualquier otro valor para la clave del Registro ProcessNameFormat
no es compatible y se reserva para uso en el futuro.
Después de actualizar el valor de la clave del Registro ProcessNameFormat
, debe reiniciar Perfmon.exe o cualquier otro consumidor de los contadores de rendimiento para que la nueva característica de asignación de nombres de instancia funcione correctamente.
En el siguiente ejemplo se muestra cómo cambiar el valor ProcessNameFormat
mediante programación.
// 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()
Al realizar este cambio en el registro y si está instalado .NET Framework 4 o posterior, Perfmon.exe muestra los nombres de las aplicaciones como application_p
processID, donde application es el nombre de la aplicación y processID es el identificador de proceso de la aplicación. Por ejemplo, si una aplicación denominada myapp.exe carga dos instancias de Common Language Runtime, Perfmon.exe puede identificar una instancia como myapp_1416 y la segunda como myapp_3160.
Nota
El identificador de proceso elimina la ambigüedad de resolver dos aplicaciones con el mismo nombre que usan versiones anteriores del tiempo de ejecución. No se necesita un identificador de tiempo de ejecución para las versiones anteriores, dado que las versiones anteriores de Common Language Runtime no admiten escenarios en paralelo.
Si .NET Framework 4 no está presente o se desinstaló, configurar la clave del registro no tiene ningún efecto. Esto significa que dos aplicaciones con el mismo nombre seguirán apareciendo en Perfmon.exe como aplicación y application#1 (por ejemplo, como myapp y myapp#1).