ICorProfilerCallback4::MovedReferences2, méthodeICorProfilerCallback4::MovedReferences2 Method

Appelée pour signaler la nouvelle disposition d'objets dans le tas suite à un garbage collection de compactage.Called to report the new layout of objects in the heap as a result of a compacting garbage collection. Cette méthode est appelée si le profileur a implémenté le ICorProfilerCallback4 interface.This method is called if the profiler has implemented the ICorProfilerCallback4 interface. Ce rappel remplace la ICorProfilerCallback::MovedReferences (méthode), car il peut indiquer des plages plus larges d’objets dont les longueurs dépassent ce qui peut être exprimé en ULONG.This callback replaces the ICorProfilerCallback::MovedReferences method, because it can report larger ranges of objects whose lengths exceed what can be expressed in a ULONG.

SyntaxeSyntax

HRESULT MovedReferences2(  
    [in]  ULONG  cMovedObjectIDRanges,  
    [in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,  
    [in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,  
    [in, size_is(cMovedObjectIDRanges)] SIZE_T    cObjectIDRangeLength[] );  

ParamètresParameters

cMovedObjectIDRanges
[in] Nombre de blocs d’objets contigus qui ont été déplacés à la suite du garbage collection de compactage.[in] The number of blocks of contiguous objects that moved as the result of the compacting garbage collection. Autrement dit, la valeur de cMovedObjectIDRanges est la taille totale des tableaux oldObjectIDRangeStart, newObjectIDRangeStart et cObjectIDRangeLength.That is, the value of cMovedObjectIDRanges is the total size of the oldObjectIDRangeStart, newObjectIDRangeStart, and cObjectIDRangeLength arrays.

Les trois arguments suivants de MovedReferences2 sont des tableaux parallèles.The next three arguments of MovedReferences2 are parallel arrays. En d'autres termes, oldObjectIDRangeStart[i], newObjectIDRangeStart[i] et cObjectIDRangeLength[i] concernent un bloc unique d'objets contigus.In other words, oldObjectIDRangeStart[i], newObjectIDRangeStart[i], and cObjectIDRangeLength[i] all concern a single block of contiguous objects.

oldObjectIDRangeStart
[in] Tableau de valeurs ObjectID, chacune d'elles étant l'ancienne adresse de début (avant le garbage collection) d'un bloc d'objets actifs contigus dans la mémoire.[in] An array of ObjectID values, each of which is the old (pre-garbage collection) starting address of a block of contiguous, live objects in memory.

newObjectIDRangeStart
[in] Tableau de valeurs ObjectID, chacune d’elles étant la nouvelle adresse de début (après le garbage collection) d’un bloc d’objets actifs contigus dans la mémoire.[in] An array of ObjectID values, each of which is the new (post-garbage collection) starting address of a block of contiguous, live objects in memory.

cObjectIDRangeLength
[in] Tableau d'entiers, chacun d'eux correspondant à la taille d'un bloc d'objets contigus dans la mémoire.[in] An array of integers, each of which is the size of a block of contiguous objects in memory.

Une taille est spécifiée pour chaque bloc référencé dans les tableaux oldObjectIDRangeStart et newObjectIDRangeStart.A size is specified for each block that is referenced in the oldObjectIDRangeStart and newObjectIDRangeStart arrays.

NotesRemarks

Un garbage collection de compactage récupère la mémoire occupée par des objets morts et compacte cet espace libéré.A compacting garbage collector reclaims the memory occupied by dead objects and compacts that freed space. Par conséquent, les objets actifs peuvent être déplacés dans le tas, et les valeurs ObjectID distribuées par des notifications précédentes peuvent changer.As a result, live objects might be moved within the heap, and ObjectID values distributed by previous notifications might change.

Supposons qu'une valeur ObjectID existante (oldObjectID) se trouve dans la plage suivante :Assume that an existing ObjectID value (oldObjectID) lies within the following range:

oldObjectIDRangeStart[i] <= oldObjectID < oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Dans ce cas, l'offset du début de la plage au début de l'objet est le suivant :In this case, the offset from the start of the range to the start of the object is as follows:

oldObjectID - oldObjectRangeStart[i]

Pour toute valeur d'i se trouvant dans la plage suivante :For any value of i that is in the following range:

0 <= i < cMovedObjectIDRanges0 <= i < cMovedObjectIDRanges

Vous pouvez calculer le nouvel ObjectID comme suit :you can calculate the new ObjectID as follows:

newObjectID = newObjectIDRangeStart[i] + (oldObjectIDoldObjectIDRangeStart[i])newObjectID = newObjectIDRangeStart[i] + (oldObjectIDoldObjectIDRangeStart[i])

Aucune des valeurs ObjectID passées par MovedReferences2 n'est valide pendant le rappel lui-même, car le garbage collector peut être occupé à déplacer des objets depuis des anciens emplacements vers des nouveaux.None of the ObjectID values passed by MovedReferences2 are valid during the callback itself, because the garbage collector might be in the middle of moving objects from old locations to new locations. Les profileurs ne doivent donc pas essayer d'inspecter des objets pendant un appel de MovedReferences2.Therefore, profilers should not attempt to inspect objects during a MovedReferences2 call. Un ICorProfilerCallback2::GarbageCollectionFinished rappel indique que tous les objets ont été déplacés vers leurs nouveaux emplacements et inspection peut être effectuée.A ICorProfilerCallback2::GarbageCollectionFinished callback indicates that all objects have been moved to their new locations and inspection can be performed.

Si le profileur implémente à la fois le ICorProfilerCallback et ICorProfilerCallback4 interfaces, le MovedReferences2 méthode est appelée avant la ICorProfilerCallback :: MovedReferences (méthode), mais uniquement si le MovedReferences2 méthode est retournée avec succès.If the profiler implements both the ICorProfilerCallback and the ICorProfilerCallback4 interfaces, the MovedReferences2 method is called before the ICorProfilerCallback::MovedReferences method, but only if the MovedReferences2 method returns successfully. Les profileurs peuvent retourner un HRESULT qui indique un échec de la méthode MovedReferences2 pour éviter d'appeler la seconde méthode.Profilers can return an HRESULT that indicates failure from the MovedReferences2 method, to avoid calling the second method.

Configuration requiseRequirements

Plateformes : Consultez Configuration requise.Platforms: See System Requirements.

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

Bibliothèque : CorGuids.libLibrary: CorGuids.lib

Versions du .NET Framework : Disponible à partir de 4.5Available since 4.5.NET Framework Versions: Disponible à partir de 4.5Available since 4.5

Voir aussiSee also