Methode ICorProfilerCallback4::MovedReferences2
Aangeroepen om de nieuwe indeling van objecten in de hoop te rapporteren als gevolg van een gecomprimeerde garbagecollection. Deze methode wordt aangeroepen als de profiler de interface ICorProfilerCallback4 heeft geïmplementeerd. Deze callback vervangt de methode ICorProfilerCallback::MovedReferences , omdat deze grotere bereiken van objecten kan rapporteren waarvan de lengte groter is dan wat kan worden uitgedrukt in een ULONG.
Syntaxis
HRESULT MovedReferences2(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] SIZE_T 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 MovedReferences2
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
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 MovedReferences2
waarden zijn geldig tijdens het terugbellen zelf, omdat de garbagecollection mogelijk bezig is met het verplaatsen van objecten van oude locaties naar nieuwe locaties. Daarom mogen profilers geen objecten inspecteren tijdens een MovedReferences2
aanroep. Een callback ICorProfilerCallback2::GarbageCollectionFinished geeft aan dat alle objecten zijn verplaatst naar hun nieuwe locaties en dat de inspectie kan worden uitgevoerd.
Als de profiler zowel de ICorProfilerCallback - als de ICorProfilerCallback4-interfaces implementeert, wordt de MovedReferences2
methode aangeroepen vóór de methode ICorProfilerCallback::MovedReferences , maar alleen als de MovedReferences2
methode met succes wordt geretourneerd. Profilers kunnen een HRESULT retourneren die een fout van de MovedReferences2
methode aangeeft, om te voorkomen dat de tweede methode wordt aangeroepen.
Vereisten
Platforms: Zie Systeemvereisten.
Header: CorProf.idl, CorProf.h
Bibliotheek: CorGuids.lib
.NET Framework versies: beschikbaar sinds 4.5