Partager via


ICorProfilerCallback4::SurvivingReferences2, méthode

Signale la disposition d'objets dans le tas suite à un garbage collection de non-compactage. Cette méthode est appelée si le profileur a implémenté l’interface ICorProfilerCallback4. Ce rappel remplace la méthode ICorProfilerCallback2::SurvivingReferences, car il peut indiquer des plages plus larges d’objets dont les longueurs dépassent ce qui peut être exprimé dans un ULONG.

Syntaxe

HRESULT SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                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 SurvivingReferences2 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

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 SurvivingReferences2 pour les garbage collection de non-compactage. Pour les garbage collection de compactage, MovedReferences2 est appelé à 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 SurvivingReferences2 ou un rappel MovedReferences2, mais pas les deux.

Plusieurs rappels SurvivingReferences2 peuvent être reçus pendant un garbage collection particulier, en raison de la mise en mémoire tampon interne limitée, de multiples rappels pendant un garbage collection de serveur et pour d’autres raisons. En cas de rappels multiples pendant un garbage collection, les informations se cumulent ; toutes les références qui sont rapportées dans un rappel SurvivingReferences2 survivent au garbage collection.

Si le profileur implémente à la fois les interfaces ICorProfilerCallback et ICorProfilerCallback4, la méthode SurvivingReferences2 est appelée avant la méthode ICorProfilerCallback2::SurvivingReferences, mais uniquement si SurvivingReferences2 est correctement retourné. Les profileurs peuvent retourner une valeur HRESULT qui indique un échec de la méthode SurvivingReferences2 pour éviter d'appeler la seconde méthode.

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 4.5

Voir aussi