Sdílet prostřednictvím


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, valueRefIdsa 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 GarbageCollectionFinishedsysté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

Viz také