Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vrátí enumerátor pro všechny metody, které jsou definovány v daném modulu NGen a vložené dané metody.
Syntaxe
HRESULT EnumNgenModuleMethodsInliningThisMethod(
[in] ModuleID inlinersModuleId,
[in] ModuleID inlineeModuleId,
[in] mdMethodDef inlineeMethodId,
[out] BOOL *incompleteData,
[out] ICorProfilerMethodEnum** ppEnum
);
Parametry
inlinersModuleId
[v] Identifikátor modulu NGen.
inlineeModuleId
[v] Identifikátor modulu, který definuje inlineeMethodId. Další informace naleznete v části Poznámky.
inlineeMethodId
[v] Identifikátor vložené metody. Další informace naleznete v části Poznámky.
incompleteData
[out] Příznak, který označuje, zda ppEnum obsahuje všechny metody inlinující danou metodu. Další informace naleznete v části Poznámky.
ppEnum
[out] Ukazatel na adresu enumerátoru
Poznámky
inlineeModuleId a inlineeMethodId společně tvoří úplný identifikátor metody, která může být vložena. Předpokládejme například, že modul A definuje metodu Simple.Add:
Simple.Add(int a, int b)
{ return a + b; }
a modul B definuje Fancy.AddTwice:
Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }
Předpokládejme také, že Fancy.AddTwice je vložené volání SimpleAddmetody . Profiler může pomocí tohoto enumerátoru najít všechny metody definované v modulu B, které jsou vložené Simple.Adda výsledek by vyčíslil AddTwice.
inlineeModuleIdje identifikátor modulu Aa inlineeMethodId je identifikátorem .Simple.Add(int a, int b)
Pokud incompleteData je hodnota true po vrácení funkce, enumerátor neobsahuje všechny metody vkládání dané metody. K tomu může dojít v případě, že ještě nebyla načtena jedna nebo více přímých nebo nepřímých závislostí modulu vložených součástí. Pokud profiler potřebuje přesná data, měl by to zkusit později, až se načtou další moduly, nejlépe při každém načtení modulu.
Pomocí EnumNgenModuleMethodsInliningThisMethod metody lze obejít omezení vkládání pro ReJIT. ReJIT umožňuje profileru změnit implementaci metody a pak pro ni za běhu vytvořit nový kód. Mohli bychom například změnit Simple.Add takto:
Simple.Add(int a, int b)
{ return 42; }
Vzhledem k tomu, že Fancy.AddTwice již byla vložena Simple.Add, má i nadále stejné chování jako předtím. Chcete-li toto omezení obejít, volající musí vyhledat všechny metody ve všech modulech, které jsou vloženy Simple.Add a používají ICorProfilerInfo5::RequestRejit na každé z těchto metod. Při opětovné kompilaci metod budou mít místo starého chování nové chování Simple.Add .
Požadavky
Platformy: Viz Požadavky na systém.
Záhlaví: CorProf.idl, CorProf.h
Knihovny: CorGuids.lib
Verze rozhraní .NET Framework: K dispozici od verze 4.6