Methode ICorProfilerCallback5::ConditionalWeakTableElementReferences
Identificeert de transitieve sluiting van objecten waarnaar wordt verwezen door deze wortels via zowel directe lidveldverwijzingen als via ConditionalWeakTable
afhankelijkheden.
Syntaxis
HRESULT ConditionalWeakTableElementReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID keyRefIds[],
[in, size_is(cRootRefs)] ObjectID valueRefIds[],
[in, size_is(cRootRefs)] GCHandleID rootIds[]
);
Parameters
cRootRefs
[in] Het aantal elementen in de keyRefIds
matrices , valueRefIds
en rootIds
.
keyRefIds
[in] Een matrix van object-id's, die elk de ObjectID
voor het primaire element in het afhankelijke greeppaar bevat.
valueRefIds
[in] Een matrix van object-id's, die elk de ObjectID
voor het secundaire element in het afhankelijke greeppaar bevat. (keyRefIds[i]
blijft valueRefIds[i]
in leven.)
rootIds
[in] Een matrix met GCHandleID
waarden die verwijzen naar een geheel getal dat aanvullende informatie bevat over de hoofdmap van de garbagecollection.
Geen van de ObjectID
waarden die door de ConditionalWeakTableElementReferences
methode worden geretourneerd, zijn geldig tijdens het terugbellen zelf, omdat de garbagecollection mogelijk bezig is met het verplaatsen van objecten van oude naar nieuwe locaties. Daarom mogen profilers geen objecten inspecteren tijdens een ConditionalWeakTableElementReferences
aanroep. Op GarbageCollectionFinished
zijn alle objecten zijn verplaatst naar hun nieuwe locaties en kan inspectie worden uitgevoerd.
Voorbeeld
In het volgende codevoorbeeld ziet u hoe u ICorProfilerCallback5 implementeert en deze methode gebruikt.
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;
}
Opmerkingen
Een profiler voor de .NET Framework 4.5 of latere versies implementeert de interface ICorProfilerCallback5 en registreert de afhankelijkheden die zijn opgegeven door de ConditionalWeakTableElementReferences
methode. ICorProfilerCallback5
biedt de volledige set afhankelijkheden tussen live-objecten die worden vertegenwoordigd door ConditionalWeakTable
vermeldingen. Met deze afhankelijkheden en de lidveldverwijzingen die zijn opgegeven met de methode ICorProfilerCallback::ObjectReferences kan een beheerde profiler de volledige objectgrafiek van live-objecten genereren.
Vereisten
Platforms: Zie Systeemvereisten.
Header: CorProf.idl, CorProf.h
.NET Framework versies: beschikbaar sinds 4.5