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 oldObjectIDRangeStart
matrices , newObjectIDRangeStart
en 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]
+ (oldObjectID
– oldObjectIDRangeStart[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