ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod-Methode
Gibt einen Enumerator an alle Methoden zurück, die in einem bestimmten NGen-Modul definiert sind und sich inline einer bestimmten Methode befinden.
Syntax
HRESULT EnumNgenModuleMethodsInliningThisMethod(
[in] ModuleID inlinersModuleId,
[in] ModuleID inlineeModuleId,
[in] mdMethodDef inlineeMethodId,
[out] BOOL *incompleteData,
[out] ICorProfilerMethodEnum** ppEnum
);
Parameter
inlinersModuleId
[in] Der Bezeichner eines NGen-Moduls.
inlineeModuleId
[in] Der Bezeichner eines Moduls, das inlineeMethodId
definiert. Weitere Informationen finden Sie im Abschnitt Hinweise.
inlineeMethodId
[in] Der Bezeichner einer Inlinemethode. Weitere Informationen finden Sie im Abschnitt Hinweise.
incompleteData
[out] Ein Flag, das angibt, ob ppEnum
alle Methoden enthält, die inline eine bestimmte Methode enthalten. Weitere Informationen finden Sie im Abschnitt Hinweise.
ppEnum
[out] Ein Zeiger auf die Adresse eines Enumerators.
Bemerkungen
inlineeModuleId
und inlineeMethodId
bilden zusammen den vollständigen Bezeichner für die Methode, die möglicherweise inline ist. Ein Beispiel: Modul A
definiert eine Simple.Add
-Methode:
Simple.Add(int a, int b)
{ return a + b; }
Modul B definiert Fancy.AddTwice
:
Fancy.AddTwice(int a, int b)
{ return Simple.Add(a,b) + Simple.Add(a,b); }
Nehmen wir weiterhin an, dass Fancy.AddTwice
den Aufruf von SimpleAdd
inline ausführt. Ein Profiler könnte diesen Enumerator verwenden, um alle in Modul B definierten Methoden zu finden, die Simple.Add
inline ausführen, und das Ergebnis würde AddTwice
enumerieren. inlineeModuleId
ist der Bezeichner des Moduls A
, und inlineeMethodId
ist der Bezeichner von Simple.Add(int a, int b)
.
Wenn incompleteData
nach Rückgabe der Funktion „true“ ist, enthält der Enumerator nicht alle Methoden, die eine bestimmte Methode inline ausführen. Das kann passieren, wenn eine oder mehrere direkte oder indirekte Abhängigkeiten des Inlinermoduls noch nicht geladen wurden. Wenn ein Profiler genaue Daten benötigt, sollte er es später erneut versuchen, wenn weitere Module geladen wurden, vorzugsweise bei jeder Modulladung.
Die EnumNgenModuleMethodsInliningThisMethod
-Methode kann verwendet werden, um Einschränkungen beim Inlining für ReJIT zu umgehen. Mit ReJIT kann ein Profiler die Implementierung einer Methode ändern und dann ohne Verzögerung neuen Code dafür erstellen. Beispielsweise könnten wir Simple.Add
wie folgt ändern:
Simple.Add(int a, int b)
{ return 42; }
Da Fancy.AddTwice
jedoch Simple.Add
bereits inline verwendet, weist die Methode weiterhin das gleiche Verhalten wie zuvor auf. Um diese Einschränkung zu umgehen, muss der Aufrufer nach allen Methoden in allen Modulen suchen, die Simple.Add
inline verwenden und ICorProfilerInfo5::RequestRejit
für jede dieser Methoden verwenden. Wenn die Methoden neu kompiliert werden, weisen sie das neue Verhalten von Simple.Add
anstatt des alten Verhaltens auf.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl, CorProf.h
Bibliothek: CorGuids.lib
.NET Framework-Versionen: seit Version 4.6 verfügbar