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.Add
e il risultato enumererebbe AddTwice
. inlineeModuleId
è l'identificatore del modulo A
e 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