ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod, metod
Returnerar en uppräknare till alla metoder som definieras i en viss NGen-modul och infogar en given metod.
Syntax
HRESULT EnumNgenModuleMethodsInliningThisMethod(
[in] ModuleID inlinersModuleId,
[in] ModuleID inlineeModuleId,
[in] mdMethodDef inlineeMethodId,
[out] BOOL *incompleteData,
[out] ICorProfilerMethodEnum** ppEnum
);
Parametrar
inlinersModuleId
[in] Identifieraren för en NGen-modul.
inlineeModuleId
[in] Identifieraren för en modul som definierar inlineeMethodId
. Mer information finns i avsnittet Kommentarer.
inlineeMethodId
[in] Identifieraren för en infogad metod. Mer information finns i avsnittet Kommentarer.
incompleteData
[ut] En flagga som anger om ppEnum
innehåller alla metoder som anger en viss metod. Mer information finns i avsnittet Kommentarer.
ppEnum
[ut] En pekare till adressen för en uppräknare
Kommentarer
inlineeModuleId
och inlineeMethodId
tillsammans utgör den fullständiga identifieraren för den metod som kan vara inlindad. Anta till exempel att modulen A
definierar en metod Simple.Add
:
Simple.Add(int a, int b)
{ return a + b; }
och modul B definierar Fancy.AddTwice
:
Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }
Låt oss också anta att Fancy.AddTwice
infogar anropet till SimpleAdd
. En profilerare kan använda den här uppräknaren för att hitta alla metoder som definierats i modul B som infogade Simple.Add
, och resultatet skulle räkna AddTwice
upp . inlineeModuleId
är identifieraren för modulen A
och inlineeMethodId
är identifieraren för Simple.Add(int a, int b)
.
Om incompleteData
är sant när funktionen returnerar innehåller uppräknaren inte alla metoder som anger en viss metod. Detta kan inträffa när en eller flera direkta eller indirekta beroenden av inliners-modulen inte har lästs in ännu. Om en profilerare behöver korrekta data bör den försöka igen senare när fler moduler läses in, helst vid varje modulinläsning.
Metoden EnumNgenModuleMethodsInliningThisMethod
kan användas för att kringgå begränsningar för inlinning för ReJIT. Med ReJIT kan en profilerare ändra implementeringen av en metod och sedan skapa ny kod för den i farten. Vi kan till exempel ändra Simple.Add
på följande sätt:
Simple.Add(int a, int b)
{ return 42; }
Men eftersom Fancy.AddTwice
redan har infogats Simple.Add
fortsätter det att ha samma beteende som tidigare. För att kringgå den begränsningen måste anroparen söka efter alla metoder i alla moduler som infogas Simple.Add
och används ICorProfilerInfo5::RequestRejit
på var och en av dessa metoder. När metoderna kompileras på nytt har de det nya beteendet Simple.Add
i stället för det gamla beteendet.
Krav
Plattformar: Se Systemkrav.
Huvudet: CorProf.idl, CorProf.h
Bibliotek: CorGuids.lib
.NET Framework versioner: Tillgänglig sedan 4.6