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