Metodo ICorProfilerCallback5::ConditionalWeakTableElementReferences

Identifica la chiusura transitiva di oggetti a cui le radici fanno riferimento tramite i riferimenti di campo di membri diretti e tramite le dipendenze ConditionalWeakTable.

Sintassi

HRESULT ConditionalWeakTableElementReferences(
     [in]                     ULONG    cRootRefs,
     [in, size_is(cRootRefs)] ObjectID keyRefIds[],
     [in, size_is(cRootRefs)] ObjectID valueRefIds[],
     [in, size_is(cRootRefs)] GCHandleID rootIds[]
);

Parametri

cRootRefs
[in] Numero di elementi nelle matrici keyRefIds, valueRefIds e rootIds.

keyRefIds
[in] Matrice di ID oggetto, ognuno dei quali include il valore ObjectID per l'elemento primario nella coppia di handle dipendente.

valueRefIds
[in] Matrice di ID oggetto, ognuno dei quali include il valore ObjectID per l'elemento secondario nella coppia di handle dipendente. (keyRefIds[i] mantiene valueRefIds[i] vivo.

rootIds
[in] Matrice di valori GCHandleID che fanno riferimento a un valore Integer contenente informazioni aggiuntive sulla radice di Garbage Collection.

Nessuno dei valori ObjectID restituito dal metodo ConditionalWeakTableElementReferences è valido durante il callback stesso, poiché è possibile che il Garbage Collector stia spostando oggetti da posizioni precedenti a nuove posizioni. I profiler non devono quindi tentare di verificare gli oggetti durante una chiamata a ConditionalWeakTableElementReferences. In corrispondenza di GarbageCollectionFinished, tutti gli oggetti saranno stati spostati nelle nuove posizioni e sarà possibile verificarli.

Esempio

Nell'esempio di codice seguente viene illustrato come implementare ICorProfilerCallback5 e usare questo metodo.

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;
}

Commenti

Un profiler per .NET Framework 4.5 o versioni successive implementa l'interfaccia ICorProfilerCallback5 e registra le dipendenze specificate dal ConditionalWeakTableElementReferences metodo . ICorProfilerCallback5 fornisce il set completo di dipendenze tra gli oggetti attivi rappresentati dalle ConditionalWeakTable voci. Queste dipendenze e i riferimenti al campo membro specificati dal metodo ICorProfilerCallback::ObjectReferences consentono a un profiler gestito di generare l'oggetto grafico completo degli oggetti attivi.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl, CorProf.h

Versioni di .NET Framework: Disponibile dalla versione 4.5

Vedi anche