Delen via


Methode ICorProfilerCallback::MovedReferences

Aangeroepen om de nieuwe indeling van objecten in de hoop te rapporteren als gevolg van een gecomprimeerde garbagecollection.

Syntaxis

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

Parameters

cMovedObjectIDRanges
[in] Het aantal blokken met aaneengesloten objecten dat is verplaatst als gevolg van de gecomprimeerde garbagecollection. De waarde van cMovedObjectIDRanges is de totale grootte van de oldObjectIDRangeStartmatrices , newObjectIDRangeStarten cObjectIDRangeLength .

De volgende drie argumenten van MovedReferences zijn parallelle matrices. Met andere woorden, oldObjectIDRangeStart[i], newObjectIDRangeStart[i]en cObjectIDRangeLength[i] hebben allemaal betrekking op één blok aaneengesloten objecten.

oldObjectIDRangeStart
[in] Een matrix met ObjectID waarden, die elk het oude (pre-garbagecollection) beginadres is van een blok aaneengesloten, actieve objecten in het geheugen.

newObjectIDRangeStart
[in] Een matrix met ObjectID waarden, die elk het nieuwe beginadres (post-garbagecollection) is van een blok aaneengesloten, actieve objecten in het geheugen.

cObjectIDRangeLength
[in] Een matrix met gehele getallen, die elk de grootte hebben van een blok met aaneengesloten objecten in het geheugen.

Er wordt een grootte opgegeven voor elk blok waarnaar wordt verwezen in de oldObjectIDRangeStart matrices en newObjectIDRangeStart .

Opmerkingen

Belangrijk

Deze methode rapporteert grootten als MAX_ULONG voor objecten die groter zijn dan 4 GB op 64-bits platforms. Als u de grootte wilt ophalen van objecten die groter zijn dan 4 GB, gebruikt u in plaats daarvan de methode ICorProfilerCallback4::MovedReferences2 .

Een comprimerende garbagecollector maakt het geheugen vrij dat wordt ingenomen door dode objecten en compacts die ruimte vrijmaken. Als gevolg hiervan kunnen live-objecten binnen de heap worden verplaatst en ObjectID kunnen waarden die door eerdere meldingen zijn gedistribueerd, worden gewijzigd.

Stel dat een bestaande ObjectID waarde (oldObjectID) binnen het volgende bereik ligt:

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

In dit geval is de verschuiving van het begin van het bereik tot het begin van het object als volgt:

oldObjectID - oldObjectRangeStart[i]

Voor elke waarde van i die zich in het volgende bereik bevindt:

0 <= i<cMovedObjectIDRanges

u kunt de nieuwe ObjectID als volgt berekenen:

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

Geen van de ObjectID doorgegeven MovedReferences waarden zijn geldig tijdens het terugbellen zelf, omdat de garbagecollection zich mogelijk midden in het verplaatsen van objecten van oude locaties naar nieuwe locaties bevindt. Daarom mogen profilers geen objecten inspecteren tijdens een MovedReferences aanroep. Een callback ICorProfilerCallback2::GarbageCollectionFinished geeft aan dat alle objecten zijn verplaatst naar hun nieuwe locaties en dat de inspectie kan worden uitgevoerd.

Vereisten

Platforms: Zie Systeemvereisten.

Header: CorProf.idl, CorProf.h

Bibliotheek: CorGuids.lib

.NET Framework versies: beschikbaar sinds 2.0

Zie ook