Partager via


ICorProfilerCallback2::SurvivingReferences, méthode

Signale la disposition des objets dans le tas suite à un garbage collection de non-compactage.

HRESULT SurvivingReferences(
    [in] ULONG  cSurvivingObjectIDRanges,
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID
                objectIDRangeStart[] ,
    [in, size_is(cSurvivingObjectIDRanges)] ULONG
                cObjectIDRangeLength[] );

Paramètres

  • cSurvivingObjectIDRanges
    [in] Nombre de blocs d'objets contigus qui ont survécu suite au garbage collection de non-compactage. Autrement dit, la valeur de cSurvivingObjectIDRanges correspond à la taille des tableaux objectIDRangeStart et cObjectIDRangeLength, qui stockent respectivement un ObjectID et une longueur pour chaque bloc d'objets.

    Les deux arguments suivants de SurvivingReferences sont des tableaux parallèles. Autrement dit, objectIDRangeStart et cObjectIDRangeLength concernent le même bloc d'objets contigus.

  • objectIDRangeStart
    [in] Tableau de valeurs ObjectID, qui correspondent chacune à l'adresse de départ d'un bloc d'objets actifs contigus en mémoire.

  • cObjectIDRangeLength
    [in] Tableau d'entiers, qui correspondent chacun à la taille d'un bloc d'objets contigus en mémoire qui a survécu.

    Une taille est spécifiée pour chaque bloc référencé dans le tableau objectIDRangeStart.

Notes

Les éléments des tableaux objectIDRangeStart et cObjectIDRangeLength doivent être interprétés comme suit pour déterminer si un objet a survécu au garbage collection. Partez du principe qu'une valeur ObjectID (ObjectID) se trouve dans la plage suivante :

ObjectIDRangeStart[i] <= ObjectID < ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Pour toute valeur d'i qui se trouve dans la plage suivante, l'objet a survécu au garbage collection :

0 <= i < cSurvivingObjectIDRanges

Un garbage collection de non-compactage libère la mémoire occupée par des objets « morts », mais ne compacte pas cet espace libéré. Par conséquent, la mémoire est retournée au tas, mais aucun objet « vivant » n'est déplacé.

Le Common Language Runtime (CLR) appelle SurvivingReferences pour les garbage collections de non-compactage. Pour les garbage collections de compactage, ICorProfilerCallback::MovedReferences est appelé à la place. Un seul garbage collection peut compacter une génération et ne pas en compacter une autre. Pour un garbage collection de n'importe quelle génération, le profileur reçoit un rappel SurvivingReferences ou un rappel MovedReferences, mais pas les deux à la fois.

Plusieurs rappels SurvivingReferences peuvent être reçus pendant un garbage collection particulier, en raison de la mise en mémoire tampon interne limitée, du rapport de plusieurs threads dans le cas d'un garbage collection côté serveur, par exemple. En cas de rappels multiples pendant un garbage collection, les informations sont cumulatives : toutes les références qui sont rapportées dans un rappel SurvivingReferences survivent au garbage collection.

Configuration requise

Plateformes : consultez Configuration requise du .NET Framework.

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

Bibliothèque : CorGuids.lib

Versions du .NET Framework : 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Voir aussi

Référence

ICorProfilerCallback, interface

ICorProfilerCallback2, interface

Concepts

Suivi d'objet dans l'API de profilage