Delen via


Methode ICorProfilerCallback2::SurvivingReferences

Rapporteert de indeling van objecten in de hoop als gevolg van een niet-comprimerende garbagecollection.

Syntaxis

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

Parameters

cSurvivingObjectIDRanges
[in] Het aantal blokken met aaneengesloten objecten dat is overgeslagen 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 voor elk blok objecten worden opgeslagen.

De volgende twee argumenten van SurvivingReferences 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 met gehele getallen, die elk de grootte hebben van een overlevend blok met aaneengesloten objecten in het geheugen.

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

Opmerkingen

Belangrijk

Deze methode rapporteert grootten als MAX_ULONG voor objecten die groter zijn dan 4 GB op 64-bits platforms. Gebruik voor objecten die groter zijn dan 4 GB in plaats daarvan de methode ICorProfilerCallback4::SurvivingReferences2 .

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 geretourneerd naar de heap, maar worden er geen 'live' objecten verplaatst.

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

Er kunnen meerdere SurvivingReferences callbacks worden ontvangen tijdens een bepaalde garbagecollection, vanwege beperkte interne buffering, meerdere threads die worden gerapporteerd in het geval van 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 SurvivingReferences callback worden gerapporteerd, overleven de garbagecollection.

Vereisten

Platforms: Zie Systeemvereisten.

Header: CorProf.idl, CorProf.h

Bibliotheek: CorGuids.lib

.NET Framework versies: beschikbaar sinds 2.0

Zie ook