ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod metódus

Egy enumerátort ad vissza az adott NGen-modulban definiált összes metódusnak, és beágyazottan egy adott metódust.

Szintaxis

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

Paraméterek

inlinersModuleId
[in] Egy NGen-modul azonosítója.

inlineeModuleId
[in] Egy modul azonosítója, amely meghatározza a következőt inlineeMethodId: . További információért tekintse meg a Megjegyzések szakaszt.

inlineeMethodId
[in] Egy beágyazott metódus azonosítója. További információért tekintse meg a Megjegyzések szakaszt.

incompleteData
[kifelé] Egy jelző, amely azt jelzi, hogy az adott metódust tartalmazó összes metódust tartalmazza-e ppEnum . További információért tekintse meg a Megjegyzések szakaszt.

ppEnum
[kifelé] Egy enumerátor címére mutató mutató

Megjegyzések

inlineeModuleId és inlineeMethodId együtt alkotják a beágyazott metódus teljes azonosítóját. Tegyük fel például, hogy a modul A meghatároz egy metódust Simple.Add:

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

és a B modul a következőket Fancy.AddTwicehatározza meg:

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

Tegyük fel azt is, hogy Fancy.AddTwice a hívása inlines (inlines) a következőhöz SimpleAdd: . A profilkészítő ezzel az enumerátorsal megkeresheti a B modulban definiált összes olyan metódust, amely beágyazott Simple.Add, és az eredmény enumerálja a metódust AddTwice. inlineeModuleId a modul Aazonosítója, és inlineeMethodId a azonosítója Simple.Add(int a, int b).

Ha incompleteData a függvény visszaadása után igaz, az enumerátor nem tartalmaz minden metódust, amely egy adott metódust tartalmaz. Ez akkor fordulhat elő, ha a inliners modul egy vagy több közvetlen vagy közvetett függősége még nincs betöltve. Ha egy profilkészítőnek pontos adatokra van szüksége, később újra kell próbálkoznia, amikor több modul töltődik be, lehetőleg minden modul betöltésekor.

A EnumNgenModuleMethodsInliningThisMethod metódussal megkerülhetők a ReJIT-re vonatkozó formázási korlátozások. A ReJIT lehetővé teszi, hogy egy profilkészítő módosítsa egy metódus implementációját, majd menet közben hozzon létre új kódot. Módosíthatjuk Simple.Add például az alábbiakat:

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

Fancy.AddTwice Mivel azonban már beágyazottSimple.Add, továbbra is ugyanaz a viselkedése, mint korábban. A korlátozás megkerüléséhez a hívónak minden olyan modulban meg kell keresnie az összes metódust, amely be van kapcsolva Simple.Add , és az egyes metódusokon használja ICorProfilerInfo5::RequestRejit őket. Az újrafordított metódusok a régi helyett az új viselkedést Simple.Add fogják használni.

Követelmények

Platformok: Lásd: Rendszerkövetelmények.

Fejléc: CorProf.idl, CorProf.h

Könyvtár: CorGuids.lib

.NET-keretrendszer verziók: 4.6 óta elérhető

Lásd még