Udostępnij za pośrednictwem


ICorProfilerInfo6::EnumNgenModuleMethodsInliningThisMethod, metoda

Zwraca moduł wyliczający do wszystkich metod zdefiniowanych w danym module NGen i wbudowanych w daną metodę.

Składnia

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

Parametry

inlinersModuleId
[w] Identyfikator modułu NGen.

inlineeModuleId
[w] Identyfikator modułu definiującego inlineeMethodIdelement . Zobacz sekcję Spostrzeżenia, aby uzyskać więcej informacji.

inlineeMethodId
[w] Identyfikator metody inlined. Zobacz sekcję Spostrzeżenia, aby uzyskać więcej informacji.

incompleteData
[out] Flaga wskazująca, czy ppEnum zawiera wszystkie metody przedstawiające daną metodę. Zobacz sekcję Spostrzeżenia, aby uzyskać więcej informacji.

ppEnum
[out] Wskaźnik do adresu modułu wyliczającego

Uwagi

inlineeModuleId i inlineeMethodId razem tworzą pełny identyfikator metody, która może być podkreślona. Załóżmy na przykład, że moduł A definiuje metodę Simple.Add:

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

i moduł B definiuje Fancy.AddTwice:

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

Załóżmy również, że Fancy.AddTwice wywołyj wywołanie do SimpleAdd. Profiler może użyć tego modułu wyliczającego do znalezienia wszystkich metod zdefiniowanych w module B, który w tekście Simple.Addi wynik będzie wyliczać AddTwice. inlineeModuleId jest identyfikatorem modułu Ai inlineeMethodId jest identyfikatorem Simple.Add(int a, int b).

Jeśli incompleteData funkcja ma wartość true po powrocie funkcji, moduł wyliczający nie zawiera wszystkich metod podkreślijących daną metodę. Może się to zdarzyć, gdy jeden lub więcej bezpośrednich lub pośrednich zależności modułu inliners nie został jeszcze załadowany. Jeśli profiler potrzebuje dokładnych danych, powinien ponowić próbę później po załadowaniu większej liczby modułów, najlepiej przy każdym obciążeniu modułu.

Metoda EnumNgenModuleMethodsInliningThisMethod może służyć do obejścia ograniczeń dotyczących tworzenia interfejsu ReJIT. Funkcja ReJIT umożliwia profilerowi zmianę implementacji metody, a następnie utworzenie nowego kodu na bieżąco. Na przykład możemy zmienić Simple.Add w następujący sposób:

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

Jednak ponieważ Fancy.AddTwice już podkreślił Simple.Add, nadal ma takie samo zachowanie jak wcześniej. Aby obejść to ograniczenie, obiekt wywołujący musi wyszukać wszystkie metody we wszystkich modułach wbudowanych Simple.Add i użyć ICorProfilerInfo5::RequestRejit w każdej z tych metod. Po ponownym skompilowaniu metod będą miały nowe zachowanie Simple.Add zamiast starego zachowania.

Wymagania

Platformy: Zobacz Wymagania systemowe.

Nagłówka: CorProf.idl, CorProf.h

Biblioteki: CorGuids.lib

wersje .NET Framework: dostępne od wersji 4.6

Zobacz też