Dela via


ICorProfilerCallback5::ConditionalWeakTableElementReferences-metod

Identifierar den transitiva stängningen av objekt som refereras av dessa rötter genom både direktmedlemsfältreferenser och genom ConditionalWeakTable beroenden.

Syntax

HRESULT ConditionalWeakTableElementReferences(
     [in]                     ULONG    cRootRefs,
     [in, size_is(cRootRefs)] ObjectID keyRefIds[],
     [in, size_is(cRootRefs)] ObjectID valueRefIds[],
     [in, size_is(cRootRefs)] GCHandleID rootIds[]
);

Parametrar

cRootRefs
[i] Antalet element i matriserna keyRefIds, valueRefIdsoch rootIds .

keyRefIds
[i] En matris med objekt-ID:t, som var och en innehåller ObjectID för det primära elementet i det beroende referensparet.

valueRefIds
[i] En matris med objekt-ID:t, som var och en innehåller ObjectID för det sekundära elementet i det beroende referensparet. (keyRefIds[i] håller valueRefIds[i] vid liv.)

rootIds
[i] En matris med GCHandleID värden som pekar på ett heltal som innehåller ytterligare information om skräpinsamlingsroten.

Inget av de ObjectID värden som returneras av ConditionalWeakTableElementReferences metoden är giltiga under återanropet, eftersom skräpinsamlaren kan vara i färd med att flytta objekt från gamla till nya platser. Profilerare bör därför inte försöka inspektera objekt under ett ConditionalWeakTableElementReferences anrop. Vid GarbageCollectionFinishedhar alla objekt flyttats till sina nya platser och inspektion kan göras.

Exempel

Följande kodexempel visar hur du implementerar ICorProfilerCallback5 och använder den här metoden.

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

Kommentarer

En profilerare för .NET Framework 4.5 eller senare versioner implementerar gränssnittet ICorProfilerCallback5 och registrerar de beroenden som anges av ConditionalWeakTableElementReferences metoden. ICorProfilerCallback5 innehåller en fullständig uppsättning beroenden mellan levande objekt som representeras av ConditionalWeakTable poster. Dessa beroenden och medlemsfältreferenserna som anges av metoden ICorProfilerCallback::ObjectReferences gör det möjligt för en hanterad profilerare att generera det fullständiga objektdiagrammet för levande objekt.

Krav

Plattformar: Se Systemkrav.

Huvudet: CorProf.idl, CorProf.h

.NET Framework versioner: Tillgänglig sedan 4.5

Se även