Compartir a través de


Método ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod

Este método puede usarse para obtener un enumerador que incluya todos los métodos que se definan en el módulo NGen que se especifique e insertar el método que se especifique.

Sintaxis

HRESULT EnumNgenModuleMethodsInliningThisMethod(
        [in] ModuleID inlinersModuleId,
        [in] ModuleID inlineeModuleId,
        [in] mdMethodDef inlineeMethodId,
        [out] BOOL *incompleteData,
        [out] ICorProfilerMethodEnum** ppEnum
);

Parámetros

inlinersModuleId
[in] El valor de este parámetro se corresponde con el identificador de un módulo NGen.

inlineeModuleId
[in] El valor de este parámetro se corresponde con el identificador del módulo donde se define el valor del parámetro inlineeMethodId. Vea la sección Comentarios para obtener más información.

inlineeMethodId
[in] El valor de este parámetro se corresponde con el identificador de un método insertado. Vea la sección Comentarios para obtener más información.

incompleteData
[out] El valor de este parámetro se corresponde con una marca donde se indica si el enumerador del parámetro ppEnum incluye todos los métodos que insertan un método determinado. Vea la sección Comentarios para obtener más información.

ppEnum
[out] El valor de este parámetro se corresponde con un puntero que apunta a la dirección de un enumerador.

Observaciones

Para obtener el identificador completo del método que puede estar insertado, se combinan los valores de los parámetros inlineeModuleId y inlineeMethodId. Por ejemplo, supongamos que en el módulo A se define el método Simple.Add, de la siguiente manera:

Simple.Add(int a, int b)
{ return a + b; }

Además, supongamos que en el módulo B se define el método Fancy.AddTwice, de la siguiente manera:

Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }

Supongamos también que, en el método Fancy.AddTwice, se inserta la llamada al método SimpleAdd. Este enumerador podría usarse con un generador de perfiles para buscar todos los métodos que se definan en el módulo B en los que se incluya el método Simple.Add; en el resultado, se enumeraría el método AddTwice. El valor del parámetro inlineeModuleId será el identificador del módulo A y el valor del parámetro inlineeMethodId será el identificador del método Simple.Add(int a, int b).

Si el valor del parámetro incompleteData es true cuando se devuelva la función, significará que el enumerador no contiene todos los métodos en los que se inserta un método determinado. Esto puede ocurrir si todavía no se han cargado una o varias de las dependencias directas o indirectas del módulo donde se produce la inserción. Si un generador de perfiles necesita datos precisos, deberá reintentarlo cuando se hayan cargado más módulos, preferiblemente tras el proceso de carga de cada módulo.

El método EnumNgenModuleMethodsInliningThisMethod se puede usar para solucionar las limitaciones de inserción de ReJIT. En ReJIT, se permite el uso de un generador de perfiles para cambiar la implementación de un método y, a continuación, crear código nuevo para este sobre la marcha. Por ejemplo, el método Simple.Add se podría cambiar de la siguiente manera:

Simple.Add(int a, int b)
{ return 42; }

Sin embargo, dado que en el método Fancy.AddTwice ya se ha insertado el método Simple.Add, este seguirá teniendo el mismo comportamiento que antes. Para solucionar esta limitación, el llamador deberá buscar todos los métodos de todos los módulos en los que se inserte el método Simple.Add y deberá usar el método ICorProfilerInfo5::RequestRejit en cada uno de esos métodos. Cuando los métodos se vuelvan a compilar, estos tendrán el nuevo comportamiento del método Simple.Add en lugar del anterior.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versiones de .NET Framework: está disponible desde la versión 4.6

Consulte también