ICorProfilerCallback5::ConditionalWeakTableElementReferences – metoda
Identifikuje tranzitivní uzavření objektů odkazovaných těmito kořeny prostřednictvím přímých odkazů na pole členů a prostřednictvím ConditionalWeakTable
závislostí.
Syntaxe
HRESULT ConditionalWeakTableElementReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID keyRefIds[],
[in, size_is(cRootRefs)] ObjectID valueRefIds[],
[in, size_is(cRootRefs)] GCHandleID rootIds[]
);
Parametry
cRootRefs
[v] Počet prvků v polích keyRefIds
, valueRefIds
a rootIds
keyRefIds
[v] Pole ID objektů, z nichž každé obsahuje ObjectID
pro primární prvek v závislém úchytu.
valueRefIds
[v] Pole ID objektů, z nichž každé obsahuje ObjectID
pro sekundární prvek v závislém úchytu. (keyRefIds[i]
udržuje při valueRefIds[i]
životě.)
rootIds
[v] Pole GCHandleID
hodnot, které odkazují na celé číslo, které obsahuje další informace o kořenovém adresáři uvolňování paměti.
Žádná z ObjectID
hodnot vrácených metodou ConditionalWeakTableElementReferences
není platná během samotného zpětného volání, protože uvolňování paměti může být v procesu přesunu objektů ze starých do nových umístění. Proto by se profilátory neměly pokoušet kontrolovat objekty během ConditionalWeakTableElementReferences
volání. V GarbageCollectionFinished
systému byly všechny objekty přesunuty do nových umístění a je možné provést kontrolu.
Příklad
Následující příklad kódu ukazuje, jak implementovat ICorProfilerCallback5 a použít tuto metodu.
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;
}
Poznámky
Profiler pro rozhraní .NET Framework 4.5 nebo novější verze implementuje rozhraní ICorProfilerCallback5 a zaznamenává závislosti určené metodou ConditionalWeakTableElementReferences
. ICorProfilerCallback5
poskytuje úplnou sadu závislostí mezi živými objekty reprezentovanými položkami ConditionalWeakTable
. Tyto závislosti a odkazy na pole členů zadané metodou ICorProfilerCallback::ObjectReferences umožňují spravovanému profileru generovat úplný graf objektů živých objektů.
Požadavky
Platformy: Viz Požadavky na systém.
Záhlaví: CorProf.idl, CorProf.h
Verze rozhraní .NET Framework: K dispozici od verze 4.5