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