Freigeben über


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

Siehe auch