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