Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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ő