Partager via


ICorProfilerCallback5::ConditionalWeakTableElementReferences, méthode

Identifie la fermeture transitive des objets référencés par ces racines via les références des champs des membres directs et via les dépendances de ConditionalWeakTable.

Syntaxe

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

Paramètres

cRootRefs
[en entrée] Le nombre d'éléments dans les tableaux keyRefIds, valueRefIds et rootIds.

keyRefIds
[en entrée] Un tableau d'ID d'objets, chacun contenant l'ObjectID pour l'élément principal de la paire de handles dépendants.

valueRefIds
[en entrée] Un tableau d'ID d'objets, chacun contenant l'ObjectID pour l'élément secondaire de la paire de handles dépendants. (keyRefIds[i] conserve valueRefIds[i] actif.)

rootIds
[en entrée] Un tableau de valeurs de GCHandleID qui pointent vers un entier contenant des informations supplémentaires sur la racine de garbage collection.

Aucune des valeurs d'ObjectID retournées par la méthode ConditionalWeakTableElementReferences ne sont valides pendant le rappel lui-même, car le récupérateur de mémoire peut être occupé à déplacer des objets depuis des anciens emplacements vers des nouveaux. Les profileurs ne doivent donc pas essayer d'inspecter des objets pendant un appel de ConditionalWeakTableElementReferences. Quand l'état est GarbageCollectionFinished, tous les objets ont été déplacés à leur nouvel emplacement et une inspection peut être effectuée.

Exemple

L’exemple de code suivant montre comment implémenter ICorProfilerCallback5 et utiliser cette méthode.

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

Notes

Un profileur pour .NET Framework 4.5 ou version ultérieure implémente l’interface ICorProfilerCallback5 et enregistre les dépendances spécifiées par la méthode ConditionalWeakTableElementReferences. ICorProfilerCallback5 fournit le jeu complet de dépendances entre les objets actifs représentés par des entrées ConditionalWeakTable. Ces dépendances et les références aux champs membres spécifiés par la méthode ICorProfilerCallback::ObjectReferences permettent à un profileur managé de générer le graphique complet des objets actifs.

Spécifications

Plateformes : Consultez Configuration requise.

En-tête : CorProf.idl, CorProf.h

Versions de .NET Framework : Disponible depuis la version 4.5

Voir aussi