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 inlineeMethodId
element . 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.Add
i wynik będzie wyliczać AddTwice
. inlineeModuleId
jest identyfikatorem modułu A
i 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