Delen via


Methode ICorProfilerCallback4::SurvivingReferences2

Rapporteert de indeling van objecten in de hoop als gevolg van een niet-comprimerende garbagecollection. Deze methode wordt aangeroepen als de profiler de interface ICorProfilerCallback4 heeft geïmplementeerd. Deze callback vervangt de methode ICorProfilerCallback2::SurvivingReferences , omdat deze grotere bereiken van objecten kan rapporteren waarvan de lengte groter is dan wat kan worden uitgedrukt in een ULONG.

Syntaxis

HRESULT SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                cObjectIDRangeLength[] );  

Parameters

cSurvivingObjectIDRanges
[in] Het aantal blokken met aaneengesloten objecten dat is overleefd als gevolg van de niet-comprimerende garbagecollection. De waarde van cSurvivingObjectIDRanges is de grootte van de objectIDRangeStart matrices en cObjectIDRangeLength , waarin respectievelijk een ObjectID en een lengte worden opgeslagen voor elk blok objecten.

De volgende twee argumenten van SurvivingReferences2 zijn parallelle matrices. Met andere woorden, objectIDRangeStart en cObjectIDRangeLength betreft hetzelfde blok met aaneengesloten objecten.

objectIDRangeStart
[in] Een matrix met ObjectID waarden, die elk het beginadres zijn van een blok met aaneengesloten, actieve objecten in het geheugen.

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

Er wordt een grootte opgegeven voor elk blok waarnaar wordt verwezen in de objectIDRangeStart matrix.

Opmerkingen

De elementen van de objectIDRangeStart matrices en cObjectIDRangeLength moeten als volgt worden geïnterpreteerd om te bepalen of een object de garbagecollection heeft overleefd. Stel dat een ObjectID waarde (ObjectID) binnen het volgende bereik ligt:

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Voor elke waarde van i die zich in het volgende bereik bevindt, heeft het object de garbagecollection overleefd:

0 <= i<cSurvivingObjectIDRanges

Een niet-comprimerende garbagecollection maakt het geheugen vrij dat wordt ingenomen door 'dode' objecten, maar compacteert de vrijgekomen ruimte niet. Als gevolg hiervan wordt geheugen teruggestuurd naar de heap, maar worden er geen 'live'-objecten verplaatst.

De Common Language Runtime (CLR) roept SurvivingReferences2 niet-comprimerende garbagecollection aan. Voor het comprimeren van garbagecollecties wordt in plaats daarvan MovedReferences2 aangeroepen. Eén garbagecollection kan voor de ene generatie worden gecomprimeerd en niet gecomprimeerd voor een andere generatie. Voor een garbagecollection op een bepaalde generatie ontvangt de profiler een SurvivingReferences2 callback of een MovedReferences2-callback , maar niet beide.

Er kunnen meerdere SurvivingReferences2 callbacks worden ontvangen tijdens een bepaalde garbagecollection, vanwege beperkte interne buffering, meerdere callbacks tijdens de garbagecollection van de server en andere redenen. In het geval van meerdere callbacks tijdens een garbagecollection is de informatie cumulatief; alle verwijzingen die in een SurvivingReferences2 callback worden gerapporteerd, overleven de garbagecollection.

Als de profiler zowel de ICorProfilerCallback - als de ICorProfilerCallback4-interfaces implementeert, wordt de SurvivingReferences2 methode aangeroepen vóór de methode ICorProfilerCallback2::SurvivingReferences , maar alleen als SurvivingReferences2 wordt geretourneerd. Profilers kunnen een HRESULT retourneren dat een fout van de SurvivingReferences2 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