Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Nota:
Se han producido cambios sustanciales en la generación de perfiles en .NET Framework 4.
Cuando se inicia un proceso administrado (aplicación o servicio), carga Common Language Runtime (CLR). Cuando se inicializa CLR, evalúa las dos variables de entorno siguientes para decidir si el proceso debe conectarse a un generador de perfiles:
COR_ENABLE_PROFILING: CLR se conecta a un generador de perfiles solo si esta variable de entorno existe y se establece en 1.
COR_PROFILER: si se supera la comprobación de COR_ENABLE_PROFILING, CLR se conecta al generador de perfiles que tiene este CLSID o ProgID, que debe haberse almacenado anteriormente en el Registro. La variable de entorno COR_PROFILER se define como una cadena, como se muestra en los dos ejemplos siguientes.
set COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A} set COR_PROFILER="MyProfiler"
Para generar perfiles de una aplicación CLR, debe establecer las variables de entorno COR_ENABLE_PROFILING y COR_PROFILER antes de ejecutar la aplicación. También debe asegurarse de que el archivo DLL del generador de perfiles está registrado.
Nota:
A partir de .NET Framework 4, los generadores de perfiles no tienen que registrarse.
Nota:
Para usar generadores de perfiles de .NET Framework 2.0, 3.0 y 3.5 en .NET Framework 4 y versiones posteriores, debe establecer la variable de entorno COMPLUS_ProfAPI_ProfilerCompatibilitySetting.
Ámbito de variable de entorno
La forma de establecer las variables de entorno COR_ENABLE_PROFILING y COR_PROFILER determinará su ámbito de influencia. Puede establecer estas variables de una de las maneras siguientes:
Si establece las variables en una llamada ICorDebug::CreateProcess , solo se aplicarán a la aplicación que se está ejecutando en el momento. (También se aplicarán a otras aplicaciones iniciadas por esa aplicación que heredan el entorno).
Si establece las variables en una ventana del símbolo del sistema, se aplicarán a todas las aplicaciones que se inician desde esa ventana.
Si establece las variables en el nivel de usuario, se aplicarán a todas las aplicaciones que comience con el Explorador de archivos. Una ventana del símbolo del sistema que abra después de establecer las variables tendrá esta configuración de entorno, por lo que cualquier aplicación que inicie desde esa ventana. Para establecer variables de entorno en el nivel de usuario, haga clic con el botón derecho en Mi equipo, haga clic en Propiedades, haga clic en la pestaña Avanzadas , en Variables de entorno y agregue las variables a la lista Variables de usuario .
Si establece las variables en el nivel de equipo, se aplicarán a todas las aplicaciones que se inician en ese equipo. Una ventana del símbolo del sistema que abra en ese equipo tendrá esta configuración de entorno, por lo que cualquier aplicación que inicie desde esa ventana. Esto significa que todos los procesos administrados de ese equipo comenzarán con el generador de perfiles. Para establecer variables de entorno en el nivel de equipo, haga clic con el botón derecho en Mi equipo, haga clic en Propiedades, haga clic en la pestaña Avanzadas , en Variables de entorno, agregue las variables a la lista Variables del sistema y, a continuación, reinicie el equipo. Después de reiniciarse, las variables estarán disponibles en todo el sistema.
Si va a generar perfiles de un servicio de Windows, debe reiniciar el equipo después de establecer las variables de entorno y registrar el archivo DLL del generador de perfiles. Para obtener más información sobre estas consideraciones, consulte la sección Generación de perfiles de un servicio de Windows.
Consideraciones adicionales
La clase profiler implementa las interfaces ICorProfilerCallback e ICorProfilerCallback2 . En .NET Framework versión 2.0, un generador de perfiles debe implementar
ICorProfilerCallback2. Si no lo hace,ICorProfilerCallback2no se cargará.Solo un generador de perfiles puede generar perfiles de un proceso a la vez en un entorno determinado. Puede registrar dos generadores de perfiles diferentes en entornos diferentes, pero cada uno debe generar perfiles de procesos independientes. El generador de perfiles debe implementarse como un archivo DLL de servidor COM en proceso, que se asigna al mismo espacio de direcciones que el proceso que se está generando el perfil. Esto significa que el generador de perfiles se ejecuta en proceso. .NET Framework no admite ningún otro tipo de servidor COM. Por ejemplo, si un generador de perfiles quiere supervisar aplicaciones desde un equipo remoto, debe implementar agentes de recopilador en cada equipo. Estos agentes procesarán por lotes los resultados y los comunicarán al equipo de recopilación de datos central.
Dado que el generador de perfiles es un objeto COM que se crea una instancia en proceso, cada aplicación con perfiles tendrá su propia copia del generador de perfiles. Por lo tanto, una única instancia del generador de perfiles no tiene que controlar los datos de varias aplicaciones. Sin embargo, tendrá que agregar lógica al código de registro del generador de perfiles para evitar que el archivo de registro sobrescriba de otras aplicaciones con perfiles.
Inicialización del generador de perfiles
Cuando se superan ambas comprobaciones de variables de entorno, CLR crea una instancia del generador de perfiles de forma similar a la función COM CoCreateInstance . El generador de perfiles no se carga a través de una llamada directa a CoCreateInstance. Por lo tanto, se evita una llamada a CoInitialize, que requiere establecer el modelo de subprocesos. A continuación, CLR llama al método ICorProfilerCallback::Initialize en el generador de perfiles. La firma de este método es la siguiente.
HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)
El generador de perfiles debe consultar pICorProfilerInfoUnk un puntero de interfaz ICorProfilerInfo o ICorProfilerInfo2 y guardarlo para que pueda solicitar más información más adelante durante la generación de perfiles.
Establecimiento de notificaciones de eventos
A continuación, el generador de perfiles llama al método ICorProfilerInfo::SetEventMask para especificar qué categorías de notificaciones le interesan. Por ejemplo, si el generador de perfiles solo está interesado en la función, escriba y deje las notificaciones y las notificaciones de recolección de elementos no utilizados, especifica lo siguiente.
ICorProfilerInfo* pInfo;
pICorProfilerInfoUnk->QueryInterface(IID_ICorProfilerInfo, (void**)&pInfo);
pInfo->SetEventMask(COR_PRF_MONITOR_ENTERLEAVE | COR_PRF_MONITOR_GC)
Al establecer la máscara de notificaciones de esta manera, el generador de perfiles puede limitar las notificaciones que recibe. Este enfoque ayuda al usuario a crear un generador de perfiles simple o de propósito especial. También reduce el tiempo de CPU que se desperdiciaría enviando notificaciones que el generador de perfiles simplemente omitiría.
Algunos eventos del generador de perfiles son inmutables. Esto significa que en cuanto se establecen estos eventos en la ICorProfilerCallback::Initialize devolución de llamada, no se pueden desactivar y no se pueden activar nuevos eventos. Los intentos de cambiar un evento inmutable producirán ICorProfilerInfo::SetEventMask un error HRESULT.
Generación de perfiles de un servicio de Windows
La generación de perfiles de un servicio de Windows es como generar perfiles de una aplicación de Common Language Runtime. Ambas operaciones de generación de perfiles se habilitan a través de variables de entorno. Dado que se inicia un servicio de Windows cuando se inicia el sistema operativo, las variables de entorno descritas anteriormente en este tema ya deben estar presentes y establecerse en los valores necesarios antes de que se inicie el sistema. Además, el archivo DLL de generación de perfiles ya debe estar registrado en el sistema.
Después de establecer las variables de entorno COR_ENABLE_PROFILING y COR_PROFILER y registrar el archivo DLL del generador de perfiles, debe reiniciar el equipo de destino para que el servicio de Windows pueda detectar esos cambios.
Tenga en cuenta que estos cambios habilitarán la generación de perfiles en todo el sistema. Para evitar que todas las aplicaciones administradas que se ejecuten posteriormente se generarán perfiles, debe eliminar las variables de entorno del sistema después de reiniciar el equipo de destino.
Esta técnica también conduce a que cada proceso clR se perfile. El generador de perfiles debe agregar lógica a su devolución de llamada ICorProfilerCallback::Initialize para detectar si el proceso actual es de interés. Si no es así, el generador de perfiles puede conmutar por error la devolución de llamada sin realizar la inicialización.