Delen via


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 oldObjectIDRangeStartmatrices , newObjectIDRangeStarten 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] + (oldObjectIDoldObjectIDRangeStart[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

Zie ook