Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 keyRefIdstablicach , valueRefIdsi 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 GarbageCollectionFinishedsystemie 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