ICorProfilerCallback4::SurvivingReferences2-metod
Rapporterar layouten för objekt i heapen som ett resultat av en icke-komprimerande skräpinsamling. Den här metoden anropas om profileraren har implementerat gränssnittet ICorProfilerCallback4 . Den här återanropet ersätter metoden ICorProfilerCallback2::SurvivingReferences eftersom den kan rapportera större intervall av objekt vars längd överskrider vad som kan uttryckas i en ULONG.
Syntax
HRESULT SurvivingReferences2(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] SIZE_T
cObjectIDRangeLength[] );
Parametrar
cSurvivingObjectIDRanges
[i] Antalet block med sammanhängande objekt som överlevde till följd av den icke-komprimerande skräpinsamlingen. Det betyder att värdet cSurvivingObjectIDRanges
för är storleken på matriserna objectIDRangeStart
och cObjectIDRangeLength
, som lagrar en ObjectID
respektive en längd för varje objektblock.
Följande två argument SurvivingReferences2
är parallella matriser. Med andra ord, objectIDRangeStart
och cObjectIDRangeLength
gäller samma block med sammanhängande objekt.
objectIDRangeStart
[i] En matris med ObjectID
värden, som var och en är startadressen för ett block med sammanhängande, levande objekt i minnet.
cObjectIDRangeLength
[i] En matris med heltal, som var och en är storleken på ett kvarvarande block med sammanhängande objekt i minnet.
En storlek anges för varje block som refereras till i matrisen objectIDRangeStart
.
Kommentarer
Elementen i matriserna objectIDRangeStart
och cObjectIDRangeLength
bör tolkas på följande sätt för att avgöra om ett objekt överlevde skräpinsamlingen. Anta att ett ObjectID
värde (ObjectID
) ligger inom följande intervall:
ObjectIDRangeStart[i]
<= ObjectID
<ObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
För alla värden i
för som finns i följande intervall har objektet överlevt skräpinsamlingen:
0 <= i
<cSurvivingObjectIDRanges
En icke-komprimerande skräpsamling återtar minnet som upptas av "döda" objekt, men komprimerar inte det frigjorda utrymmet. Därför returneras minnet till heapen, men inga "levande" objekt flyttas.
CLR (Common Language Runtime) kräver SurvivingReferences2
icke-komprimerande skräpsamlingar. För att komprimera skräpsamlingar anropas MovedReferences2 i stället. En enda skräpinsamling kan komprimeras för en generation och inte komprimeras för en annan. För en skräpinsamling på en viss generation får profileraren antingen ett SurvivingReferences2
återanrop eller ett MovedReferences2-återanrop , men inte båda.
Flera SurvivingReferences2
återanrop kan tas emot under en viss skräpinsamling, på grund av begränsad intern buffring, flera återanrop under serverskräpinsamling och andra orsaker. Vid flera återanrop under en skräpinsamling är informationen kumulativ. alla referenser som rapporteras i återanrop SurvivingReferences2
överlever skräpinsamlingen.
Om profileraren implementerar både ICorProfilerCallback - och ICorProfilerCallback4-gränssnittenSurvivingReferences2
anropas metoden före metoden ICorProfilerCallback2::SurvivingReferences , men endast om SurvivingReferences2
den returneras korrekt. Profilerare kan returnera en HRESULT som indikerar ett fel från SurvivingReferences2
metoden för att undvika att anropa den andra metoden.
Krav
Plattformar: Se Systemkrav.
Huvudet: CorProf.idl, CorProf.h
Bibliotek: CorGuids.lib
.NET Framework versioner: Tillgänglig sedan 4.5