Dela via


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 AddTwiceupp . inlineeModuleId är identifieraren för modulen Aoch 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.Addfortsä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

Se även