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