Dela via


ICorProfilerCallback::MovedReferences-metod

Anropas för att rapportera den nya layouten för objekt i heapen som ett resultat av en komprimerande skräpinsamling.

Syntax

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

Parametrar

cMovedObjectIDRanges
[i] Antalet block med sammanhängande objekt som har flyttats till följd av den komprimerade skräpinsamlingen. Värdet cMovedObjectIDRanges för är alltså den totala storleken på matriserna oldObjectIDRangeStart, newObjectIDRangeStartoch cObjectIDRangeLength .

De följande tre argumenten MovedReferences i är parallella matriser. Med andra ord gäller oldObjectIDRangeStart[i], newObjectIDRangeStart[i], och cObjectIDRangeLength[i] alla ett enda block med sammanhängande objekt.

oldObjectIDRangeStart
[i] En matris med ObjectID värden, som var och en är den gamla startadressen (för skräpinsamling) för ett block med sammanhängande, levande objekt i minnet.

newObjectIDRangeStart
[i] En matris med ObjectID värden, som var och en är den nya startadressen (efter skräpinsamling) för ett block med sammanhängande, levande objekt i minnet.

cObjectIDRangeLength
[i] En matris med heltal, var och en är storleken på ett block med sammanhängande objekt i minnet.

En storlek anges för varje block som refereras till i matriserna oldObjectIDRangeStart och newObjectIDRangeStart .

Kommentarer

Viktigt

Den här metoden rapporterar storlekar som MAX_ULONG för objekt som är större än 4 GB på 64-bitarsplattformar. Om du vill hämta storleken på objekt som är större än 4 GB använder du ICorProfilerCallback4::MovedReferences2-metoden i stället.

En komprimerande skräpsamlare återtar minnet som upptas av döda föremål och komprimerar som frigör utrymme. Därför kan levande objekt flyttas inom heapen, och ObjectID värden som distribuerats av tidigare meddelanden kan ändras.

Anta att ett befintligt ObjectID värde (oldObjectID) ligger inom följande intervall:

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

I det här fallet är förskjutningen från början av intervallet till början av objektet följande:

oldObjectID - oldObjectRangeStart[i]

För alla värden i för detta ligger i följande intervall:

0 <= i<cMovedObjectIDRanges

du kan beräkna det nya ObjectID på följande sätt:

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

Inget av de värden som ObjectID skickas MovedReferences är giltiga under återanropet, eftersom skräpinsamlingen kan vara mitt i att flytta objekt från gamla platser till nya platser. Profilerare bör därför inte försöka inspektera objekt under ett MovedReferences anrop. Ett ICorProfilerCallback2::GarbageCollectionFinished-återanrop anger att alla objekt har flyttats till sina nya platser och att inspektion kan utföras.

Krav

Plattformar: Se Systemkrav.

Huvudet: CorProf.idl, CorProf.h

Bibliotek: CorGuids.lib

.NET Framework versioner: Tillgänglig sedan 2.0

Se även