Freigeben über


ICorProfilerCallback5::ConditionalWeakTableElementReferences-Methode

Identifiziert den transitiven Abschluss von Objekten, auf die durch diese Stammelemente verwiesen wird, sowohl über direkte Memberfeldverweise, als auch ConditionalWeakTable-Abhängigkeiten.

Syntax

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

Parameter

cRootRefs
[in] Die Anzahl der Elemente in keyRefIds-, in valueRefIds- und rootIds-Arrays.

keyRefIds
[in] Ein Array von Objekt-IDs, von denen jede die ObjectID für das primäre Element im abhängigen Handlepaar enthält.

valueRefIds
[in] Ein Array von Objekt-IDs, von denen jede die ObjectID für das sekundäre Element im abhängigen Handlepaar enthält. (keyRefIds[i] hält valueRefIds[i] aktiv.)

rootIds
[in] Ein Array von GCHandleID-Werten, die auf eine ganze Zahl zeigen, die zusätzliche Informationen über den Garbage Collection-Stamm enthält.

Keine ObjectID-Werte, die von der ConditionalWeakTableElementReferences-Methode zurückgegeben werden, sind während des Rückrufs selbst gültig, da der Garbage Collector möglicherweise gerade Objekten von alten an neue Speicherorte verschiebt. Deshalb sollten Profiler nicht versuchen, Objekte während eines ConditionalWeakTableElementReferences-Aufrufs zu überprüfen. Bei GarbageCollectionFinished wurden alle Objekte zu den neuen Speicherorten verschoben, und die Überprüfung kann ausgeführt werden.

Beispiel

Das folgende Codebeispiel veranschaulicht, wie Sie die Methode ICorProfilerCallback5 implementieren und verwenden.

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

Bemerkungen

Ein Profiler für .NET Framework 4.5 oder höhere Versionen implementiert die ICorProfilerCallback5-Schnittstelle und zeichnet die Abhängigkeiten auf, die von der ConditionalWeakTableElementReferences-Methode angegeben werden. ICorProfilerCallback5 stellt den vollständigen Satz von Abhängigkeiten zwischen den aktiven Objekten bereit, die durch ConditionalWeakTable-Einträge repräsentiert werden. Diese Abhängigkeiten und die von der ICorProfilerCallback::ObjectReferences-Methode angegebenen Memberfeldverweise ermöglichen es einem verwalteten Profiler, den vollständige Objektgraph aus aktiven Objekten zu generieren.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: CorProf.idl, CorProf.h

.NET Framework-Versionen: seit Version 4.5 verfügbar

Siehe auch