Metodo ICorProfilerCallback4::SurvivingReferences2
Indica il layout degli oggetti nell'heap in seguito a un'operazione di Garbage Collection senza compattazione. Questo metodo viene chiamato se il profiler ha implementato l'interfaccia ICorProfilerCallback4 . Questo callback sostituisce il metodo ICorProfilerCallback2::SurvivingReferences , perché può segnalare intervalli più grandi di oggetti le cui lunghezze superano ciò che può essere espresso in una ULONG.
Sintassi
HRESULT SurvivingReferences2(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] SIZE_T
cObjectIDRangeLength[] );
Parametri
cSurvivingObjectIDRanges
[in] Numero di blocchi di oggetti contigui rimasti in seguito alla mancata compattazione dell'operazione di Garbage Collection, ovvero il valore di cSurvivingObjectIDRanges
è la dimensione delle matrici objectIDRangeStart
e cObjectIDRangeLength
, in cui vengono rispettivamente archiviati un ObjectID
e una lunghezza per ogni blocco di oggetti.
I successivi due argomenti di SurvivingReferences2
sono matrici parallele. In altre parole, objectIDRangeStart
e cObjectIDRangeLength
riguardano lo stesso blocco di oggetti contigui.
objectIDRangeStart
[in] Matrice di valori ObjectID
, ognuno dei quali è l'indirizzo iniziale di un blocco di oggetti attivi contigui in memoria.
cObjectIDRangeLength
[in] Matrice di Integer, ognuno dei quali è la dimensione di un blocco escluso di oggetti contigui in memoria.
Viene specificata una dimensione per ogni blocco a cui si fa riferimento nella matrice objectIDRangeStart
.
Commenti
Gli elementi delle matrici objectIDRangeStart
e cObjectIDRangeLength
devono essere interpretati come indicato di seguito per determinare se un oggetto è stato escluso dall'operazione di Garbage Collection. Si supponga che un valore ObjectID
(ObjectID
) si trovi nell'intervallo seguente:
ObjectIDRangeStart[i]
<= ObjectID
<ObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
Per qualsiasi valore di i
compreso nell'intervallo seguente, l'oggetto è stato escluso dall'operazione di Garbage Collection:
0 <= i
<cSurvivingObjectIDRanges
Una mancata compattazione dell'operazione di Garbage Collection recupera la memoria occupata dagli oggetti inutilizzati, ma non compatta lo spazio liberato. Di conseguenza, la memoria viene restituita all'heap, ma gli oggetti attivi non vengono spostati.
Common Language Runtime (CLR) chiama SurvivingReferences2
per eseguire operazioni di Garbage Collection senza compattazione. Per compattare garbage collections, viene invece chiamato MovedReferences2 . Una stessa operazione di Garbage Collection può eseguire la compattazione per una generazione e non eseguirla per un'altra. Per una garbage collection in qualsiasi generazione specifica, il profiler riceverà un SurvivingReferences2
callback o un callback MovedReferences2 , ma non entrambi.
Durante una particolare operazione di Garbage Collection possono essere ricevuti più callback SurvivingReferences2
, a causa del buffer interno limitato, di callback multipli durante l'operazione di Garbage Collection per server e di altri motivi. Nel caso di più callback durante un'operazione di Garbage Collection, le informazioni sono cumulative. Tutti i riferimenti segnalati in qualsiasi callback SurvivingReferences2
vengono esclusi dall'operazione di Garbage Collection.
Se il profiler implementa sia il metodo ICorProfilerCallback che le interfacce ICorProfilerCallback4 , il SurvivingReferences2
metodo viene chiamato prima del metodo ICorProfilerCallback2::SurvivingReferences , ma solo se SurvivingReferences2
restituisce correttamente. I profiler possono restituire un valore HRESULT indicante un errore nel metodo SurvivingReferences2
per evitare di chiamare il secondo metodo.
Requisiti
Piattaforme: vedere Requisiti di sistema di .NET Framework.
Intestazione: CorProf.idl, CorProf.h
Libreria: CorGuids.lib
Versioni di .NET Framework: Disponibile dalla versione 4.5