Udostępnij za pośrednictwem


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 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

Zobacz też