Condividi tramite


Metodo ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod

Restituisce un enumeratore a tutti i metodi definiti in un determinato modulo NGen e inline a un determinato metodo.

Sintassi

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

Parametri

inlinersModuleId
[in] Identificatore di un modulo NGen.

inlineeModuleId
[in] Identificatore di un modulo che definisce inlineeMethodId. Per altre informazioni, vedere la sezione Osservazioni.

inlineeMethodId
[in] Identificatore di un metodo inlined. Per altre informazioni, vedere la sezione Osservazioni.

incompleteData
[out] Flag che indica se ppEnum contiene tutti i metodi che inliningno un determinato metodo. Per altre informazioni, vedere la sezione Osservazioni.

ppEnum
[out] Puntatore all'indirizzo di un enumeratore

Commenti

inlineeModuleId e inlineeMethodId insieme formano l'identificatore completo per il metodo che potrebbe essere inlinede. Si supponga, ad esempio, che il modulo A definisca un metodo Simple.Add:

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

e il modulo B definisce Fancy.AddTwice:

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

Si supponga anche che Fancy.AddTwice inline la chiamata a SimpleAdd. Un profiler può usare questo enumeratore per trovare tutti i metodi definiti nel modulo B che inline Simple.Adde il risultato enumererebbe AddTwice. inlineeModuleId è l'identificatore del modulo Ae inlineeMethodId è l'identificatore di Simple.Add(int a, int b).

Se incompleteData è true dopo che la funzione restituisce, l'enumeratore non contiene tutti i metodi che inliningno un determinato metodo. Ciò può verificarsi quando una o più dipendenze dirette o indirette del modulo inliners non sono ancora state caricate. Se un profiler necessita di dati accurati, dovrebbe riprovare più tardi quando vengono caricati più moduli, preferibilmente in ogni caricamento del modulo.

Il EnumNgenModuleMethodsInliningThisMethod metodo può essere usato per aggirare le limitazioni sull'inlining per ReJIT. ReJIT consente a un profiler di modificare l'implementazione di un metodo e quindi di crearne uno nuovo sul volo. Ad esempio, è possibile modificare Simple.Add come segue:

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

Tuttavia, perché Fancy.AddTwice ha già inlined Simple.Add, continua a avere lo stesso comportamento di prima. Per ovviare a tale limitazione, il chiamante deve cercare tutti i metodi in tutti i moduli inline Simple.Add e usare ICorProfilerInfo5::RequestRejit in ognuno di questi metodi. Quando i metodi vengono ricompilato, avranno il nuovo comportamento anziché Simple.Add il comportamento precedente.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl, CorProf.h

Libreria: CorGuids.lib

Versioni di .NET Framework: Disponibile dalla versione 4.6

Vedi anche