Methode ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod
Retourneert een enumerator voor alle methoden die zijn gedefinieerd in een bepaalde NGen-module en inline een bepaalde methode.
Syntaxis
HRESULT EnumNgenModuleMethodsInliningThisMethod(
[in] ModuleID inlinersModuleId,
[in] ModuleID inlineeModuleId,
[in] mdMethodDef inlineeMethodId,
[out] BOOL *incompleteData,
[out] ICorProfilerMethodEnum** ppEnum
);
Parameters
inlinersModuleId
[in] De id van een NGen-module.
inlineeModuleId
[in] De id van een module die definieert inlineeMethodId
. Zie de sectie Opmerkingen voor meer informatie.
inlineeMethodId
[in] De id van een inlined methode. Zie de sectie Opmerkingen voor meer informatie.
incompleteData
[uit] Een vlag die aangeeft of ppEnum
alle methoden bevat die een bepaalde methode bevatten. Zie de sectie Opmerkingen voor meer informatie.
ppEnum
[uit] Een verwijzing naar het adres van een enumerator
Opmerkingen
inlineeModuleId
en inlineeMethodId
vormen samen de volledige id voor de methode die mogelijk is inlined. Stel dat module A
een methode Simple.Add
definieert:
Simple.Add(int a, int b)
{ return a + b; }
en module B definieert Fancy.AddTwice
:
Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }
We gaan er ook van uit dat Fancy.AddTwice
de aanroep wordt inline naar SimpleAdd
. Een profiler kan deze enumerator gebruiken om alle methoden te vinden die zijn gedefinieerd in module B, die inline Simple.Add
en het resultaat opsommen AddTwice
. inlineeModuleId
is de id van module A
en inlineeMethodId
is de id van Simple.Add(int a, int b)
.
Als incompleteData
waar is nadat de functie is geretourneerd, bevat de enumerator niet alle methoden die een bepaalde methode bevatten. Dit kan gebeuren wanneer een of meer directe of indirecte afhankelijkheden van de inliners-module nog niet zijn geladen. Als een profiler nauwkeurige gegevens nodig heeft, moet deze het later opnieuw proberen wanneer er meer modules worden geladen, bij voorkeur bij elke modulebelasting.
De EnumNgenModuleMethodsInliningThisMethod
methode kan worden gebruikt om beperkingen voor het inlijnen voor ReJIT te omzeilen. Met ReJIT kan een profiler de implementatie van een methode wijzigen en er vervolgens snel nieuwe code voor maken. We kunnen bijvoorbeeld als volgt wijzigen Simple.Add
:
Simple.Add(int a, int b)
{ return 42; }
Omdat Fancy.AddTwice
echter al is inlined Simple.Add
, blijft het hetzelfde gedrag vertonen als voorheen. Om deze beperking te omzeilen, moet de aanroeper zoeken naar alle methoden in alle modules die inline Simple.Add
zijn en op elk van deze methoden worden gebruikt ICorProfilerInfo5::RequestRejit
. Wanneer de methoden opnieuw worden gecompileerd, hebben ze het nieuwe gedrag van Simple.Add
in plaats van het oude gedrag.
Vereisten
Platforms: Zie Systeemvereisten.
Header: CorProf.idl, CorProf.h
Bibliotheek: CorGuids.lib
.NET Framework versies: beschikbaar sinds 4.6