Compartir a través de


Generar perfiles en .NET Framework 2.0

La API de generación de perfiles se mejoró en la versión 2.0 de .NET Framework para proporcionar funciones adicionales. La nueva funcionalidad se expone a través de dos nuevas interfaces: ICorProfilerCallback2 e ICorProfilerInfo2.

Una DLL del generador de perfiles escrita para la versión 1.0 o 1.1 de .NET Framework no funcionará correctamente en el entorno Common Language Runtime (CLR) de .NET Framework 2.0. Para actualizar la DLL del generador de perfiles de manera que funcione con la versión 2.0 o posterior, debe implementar la interfaz ICorProfilerCallback2. La interfaz ICorProfilerInfo2 hereda de la interfaz ICorProfilerInfo e introduce nuevos métodos que admiten la interacción mejorada con CLR.

Los cambios se tratan en las siguientes secciones:

  • Genéricos

  • División del código

  • Eliminación de la depuración en proceso

  • Devoluciones de llamada con el generador de imágenes nativas

  • Devoluciones de llamada de recolección de elementos no utilizados mejoradas

  • Objects inmovilizados

  • Cambios diversos en la API

Además de los cambios realizados en la API, se agregó un nuevo HRESULT, CORPROF_E_UNSUPPORTED_CALL_SEQUENCE. Para obtener información sobre los escenarios en los que puede devolverse este HRESULT, vea CORPROF_E_UNSUPPORTED_CALL_SEQUENCE (HRESULT).

Genéricos

La introducción de genéricos en el motor en tiempo de ejecución ha producido tres cambios en la API de generación de perfiles:

Volver al principio

División del código

Los ensamblados de .NET Framework se han sometido a una optimización de rendimiento. El código nativo precompilado se ha dividido en varias regiones por función. Por consiguiente, el método ICorProfilerInfo::GetCodeInfo existente ya no puede describir correctamente la extensión del código nativo de una función. Los generadores de perfiles deben pasar a usar en su lugar el método ICorProfilerInfo2::GetCodeInfo2, más general.

Volver al principio

Eliminación de la depuración en proceso

En .NET Framework 2.0, la depuración en proceso se ha reemplazado por un conjunto de funciones coherente con la API de generación de perfiles. El resultado son las características de instantánea de pila (vea Información general sobre la generación de perfiles) e inspección de objetos.

Volver al principio

Devoluciones de llamada con el generador de imágenes nativas

Significativas optimizaciones en el Generador de imágenes nativas (NGen.exe) han movido aun más trabajo del tiempo de ejecución al tiempo de generación de imágenes nativas. Esto ha conducido a los cambios siguientes en el comportamiento de la API de generación de perfiles:

  • Para la mayoría de las funciones, las devoluciones de llamada JITCachedFunctionSearch no se reciben ya en imágenes nativas. Un generador de perfiles tiene dos opciones que dependen de cómo utiliza las devoluciones de llamada:

    • Si el generador de perfiles utiliza las devoluciones de llamada para recopilar información sobre una función, puede cambiar a un esquema donde solamente se recopila información sobre una función determinada cuando esa función se encuentra por primera vez durante la ejecución de un programa.

    • Si el generador de perfiles utiliza las devoluciones de llamada para forzar una compilación Just-In-Time (JIT) para propósitos de instrumental, puede utilizar en su lugar imágenes nativas mejoradas por el generador de perfiles. Para obtener más información, vea Generación de código en la API de generación de perfiles.

  • Para la mayoría de los tipos, las devoluciones de llamada ClassLoad no se reciben ya en imágenes nativas. Los generadores de perfiles deben utilizar técnicas de evaluación en tiempo de ejecución (también llamada evaluación laxa) para tales clases. Los generadores de perfiles que ya estén utilizando imágenes nativas mejoradas por generador de perfiles no tienen que cambiar su comportamiento. Sin embargo, un generador de perfiles no debe cambiar a imágenes nativas mejoradas por generador de perfiles a menos que necesite estas imágenes por otras razones, dado que las imágenes nativas mejoradas por generador de perfiles son significativamente diferentes de las imágenes normales.

Volver al principio

Devoluciones de llamada de recolección de elementos no utilizados mejoradas

Las devoluciones de llamada de recolección de elementos no utilizados se han mejorado de varias maneras. Las devoluciones de llamada notifican ahora al generador de perfiles que se han creado o destruido identificadores de recolección de elementos no utilizados, proporcionan información sobre la puesta en cola de objetos por finalizar y utilizan el método Collect para forzar una recolección de elementos no utilizados. El método de ICorProfilerCallback2::RootReferences2, que es una extensión de ICorProfilerCallback::RootReferences, proporciona información sobre el tipo de cada raíz. Finalmente, el método de ICorProfilerCallback2::SurvivingReferences informa del diseño de objetos del montón producido por una recolección de elementos no utilizados sin compactación.

Volver al principio

Objects inmovilizados

Los objetos inmovilizados, que son nuevos en .NET Framework 2.0, son objetos constantes que se inicializan en el momento de la generación de imagen nativa y se graban en la imagen nativa. La recolección de elementos no utilizados no reubica los objetos inmovilizados, pero los objetos de recolección de elementos no utilizados pueden hacer referencia a objeto inmovilizados. El nuevo método ICorProfilerInfo2::EnumModuleFrozenObjects permite a los generadores de perfiles enumerar objetos inmovilizados.

Volver al principio

Cambios diversos en la API

.NET Framework 2.0 también incluye los siguientes cambios en la API:

Volver al principio

Vea también

Conceptos

Información general sobre la generación de perfiles