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
, valueRefIds
och 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 GarbageCollectionFinished
har 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