Compartir a través de


Contadores de rendimiento y aplicaciones de In-ProcessBy-Side

Nota:

Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .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.

Comportamiento predeterminado

De forma predeterminada, el Monitor de rendimiento muestra contadores de rendimiento por aplicación. Sin embargo, 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, se mostrará una como myapp y la otra como myapp#1 en la columna Instancia . En este caso, es difícil hacer coincidir un contador de rendimiento con una aplicación determinada. No está claro si los datos recopilados para myapp#1 hacen referencia al primer myapp.exe o al segundo myapp.exe.

  • Cuando una aplicación usa varias instancias de Common Language Runtime. .NET Framework 4 admite escenarios de hospedaje en paralelo en proceso; es decir, un único proceso o aplicación puede cargar varias instancias de Common Language Runtime. Si una sola aplicación denominada myapp.exe carga dos instancias en tiempo de ejecución, de forma predeterminada, se designarán en la columna Instancia como myapp y myapp#1. 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 entornos de ejecución. Si varias aplicaciones con el mismo nombre cargan varios entornos de ejecución, la ambigüedad es aún mayor.

Puede establecer una clave del Registro para eliminar esta ambigüedad. En el caso de las aplicaciones desarrolladas con .NET Framework 4, este cambio del Registro agrega un identificador de proceso seguido de un identificador de instancia en tiempo de ejecución al 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_pprocessID_rruntimeID 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_pprocessID siempre que se instale .NET Framework 4.

Contadores de rendimiento para aplicaciones en paralelo de In-Process

Para controlar los contadores de rendimiento de varias versiones de Common Language Runtime hospedadas en una sola aplicación, debe cambiar una única configuración de clave del Registro, como se muestra en la tabla siguiente.

Importancia
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 contadores de rendimiento por aplicación. Al establecer este valor en 2, Perfmon.exe desambigua varias versiones de una aplicación y proporciona contadores de rendimiento por tiempo de ejecución. Cualquier otro valor para la configuración de la clave del ProcessNameFormat Registro no es compatible y está reservado para su uso futuro.

Después de actualizar la configuración de la clave del ProcessNameFormat Registro, debe reiniciar Perfmon.exe o cualquier otro consumidor de contadores de rendimiento para que la nueva característica de nomenclatura de instancias funcione correctamente.

En el ejemplo siguiente se muestra cómo cambiar el ProcessNameFormat valor 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 se instala .NET Framework 4 o posterior, Perfmon.exe muestra los nombres de las aplicaciones como application_pprocessID, 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 entorno de ejecución. No se requiere un identificador en tiempo de ejecución para versiones anteriores, ya que las versiones anteriores de Common Language Runtime no admiten escenarios en paralelo.

Si .NET Framework 4 o una versión posterior no está presente o se ha desinstalado, establecer la clave del Registro no tiene ningún efecto. Esto significa que dos aplicaciones con el mismo nombre seguirán apareciendo en Perfmon.exe que application y application#1 (por ejemplo, myapp y myapp#1).