Partager via


ICorProfilerCallback2::SurvivingReferences, méthode

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

Syntaxe

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 à la suite du garbage collection de non-compactage. Autrement dit, la valeur de cSurvivingObjectIDRanges est la taille des tableaux objectIDRangeStart et cObjectIDRangeLength qui stockent un ObjectID et une longueur, respectivement, pour chaque bloc d'objets.

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

objectIDRangeStart
[in] Tableau de valeurs ObjectID, chacune d'elles étant l'adresse de début d'un bloc d'objets actifs contigus dans la mémoire.

cObjectIDRangeLength
[in] Tableau d'entiers, chacun d'eux correspondant à la taille d'un bloc survivant d'objets contigus dans la mémoire.

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

Notes

Important

Cette méthode signale les tailles en tant que MAX_ULONG pour les objets qui sont supérieurs à 4 Go sur les plateformes 64 bits. Pour les objets qui sont supérieurs à 4 Go, utilisez la méthode ICorProfilerCallback4::SurvivingReferences2 à la place.

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. Supposons qu'une valeur ObjectID (ObjectID) se trouve dans la plage suivante :

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

Pour toute valeur de 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 « actif » n'est déplacé.

Le Common Language Runtime (CLR) appelle SurvivingReferences pour les garbage collection de non-compactage. Pour les garbage collection de compactage, la méthode ICorProfilerCallback::MovedReferences est appelée à la place. Un garbage collection unique peut être de compactage pour une génération et de non-compactage pour 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.

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 signalement de plusieurs threads lors d’un garbage collection de serveur, etc. En cas de rappels multiples pendant un garbage collection, les informations se cumulent. Ainsi, toutes les références qui sont signalées dans un rappel SurvivingReferences survivent au garbage collection.

Spécifications

Plateformes : Consultez Configuration requise.

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

Bibliothèque : CorGuids.lib

Versions de .NET Framework : Disponible depuis la version 2.0

Voir aussi