Metoda ICorProfilerCallback5::ConditionalWeakTableElementReferences
Identyfikuje przechodnie zamknięcie obiektów, do których odwołuje się te korzenie, za pośrednictwem odwołań do pól składowych bezpośrednich i zależności ConditionalWeakTable
.
Składnia
HRESULT ConditionalWeakTableElementReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID keyRefIds[],
[in, size_is(cRootRefs)] ObjectID valueRefIds[],
[in, size_is(cRootRefs)] GCHandleID rootIds[]
);
Parametry
cRootRefs
[w] Liczba elementów w keyRefIds
tablicach , valueRefIds
i rootIds
.
keyRefIds
[w] Tablica identyfikatorów obiektów, z których każda zawiera ObjectID
element podstawowy w zależnej parze uchwytów.
valueRefIds
[w] Tablica identyfikatorów obiektów, z których każda zawiera ObjectID
element pomocniczy w zależnej parze uchwytów. (keyRefIds[i]
utrzymuje valueRefIds[i]
przy życiu).
rootIds
[w] Tablica wartości wskazująca GCHandleID
liczbę całkowitą zawierającą dodatkowe informacje o katalogu głównym odzyskiwania pamięci.
Żadna z ObjectID
wartości zwróconych przez metodę ConditionalWeakTableElementReferences
nie jest prawidłowa podczas samego wywołania zwrotnego, ponieważ moduł odśmiecający pamięci może być w trakcie przenoszenia obiektów ze starych do nowych lokalizacji. W związku z tym profilerzy nie powinni próbować sprawdzać obiektów podczas wywołania ConditionalWeakTableElementReferences
. W GarbageCollectionFinished
systemie wszystkie obiekty zostały przeniesione do nowych lokalizacji i można przeprowadzić inspekcję.
Przykład
W poniższym przykładzie kodu pokazano, jak zaimplementować metodę ICorProfilerCallback5 i użyć tej metody.
HRESULT Callback5Impl::ConditionalWeakTableElementReferences(
ULONG cRootRefs,
ObjectID keyRefIds[],
ObjectID valueRefIds[],
GCHandleID rootIds[])
{
printf("Callback5Impl::ConditionalWeakTableElementReferences called\n");
for (unsigned int i = 0; i < cRootRefs; ++i)
{
// Save dependency to XML for later retrieval
PersistDependencyToXml(rootIds[i], keyRefIds[i], valueRefIds[i]);
// or store dependency to an internal map
m_cwt_deps->add_dep(rootIds[i], keyRefIds[i], valueRefIds[i]);
// or add arc to object graph
m_obj_graph->add_arc(keyRefIds[i], valueRefIds[i], rootIds[i]);
}
return S_OK;
}
Uwagi
Profiler dla wersji .NET Framework 4.5 lub nowszej implementuje interfejs ICorProfilerCallback5 i rejestruje zależności określone przez metodęConditionalWeakTableElementReferences
. ICorProfilerCallback5
zapewnia pełny zestaw zależności między obiektami na żywo reprezentowanymi przez ConditionalWeakTable
wpisy. Te zależności i odwołania do pól składowych określone przez metodę ICorProfilerCallback::ObjectReferences umożliwiają profilerowi zarządzanemu generowanie pełnego grafu obiektów na żywo.
Wymagania
Platformy: Zobacz Wymagania systemowe.
Nagłówka: CorProf.idl, CorProf.h
.NET Framework wersje: dostępne od wersji 4.5