ICorProfilerCallback4::MovedReferences2-metod
Anropas för att rapportera den nya layouten för objekt i heapen som ett resultat av en komprimerande skräpinsamling. Den här metoden anropas om profileraren har implementerat gränssnittet ICorProfilerCallback4 . Den här motringningen ersätter metoden ICorProfilerCallback::MovedReferences eftersom den kan rapportera större intervall med objekt vars längd överskrider vad som kan uttryckas i en ULONG.
Syntax
HRESULT MovedReferences2(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] SIZE_T cObjectIDRangeLength[] );
Parametrar
cMovedObjectIDRanges
[i] Antalet block med sammanhängande objekt som har flyttats till följd av den komprimerade skräpinsamlingen. Värdet cMovedObjectIDRanges
för är alltså den totala storleken på matriserna oldObjectIDRangeStart
, newObjectIDRangeStart
och cObjectIDRangeLength
.
De följande tre argumenten MovedReferences2
i är parallella matriser. Med andra ord gäller oldObjectIDRangeStart[i]
, newObjectIDRangeStart[i]
, och cObjectIDRangeLength[i]
alla ett enda block med sammanhängande objekt.
oldObjectIDRangeStart
[i] En matris med ObjectID
värden, som var och en är den gamla startadressen (för skräpinsamling) för ett block med sammanhängande, levande objekt i minnet.
newObjectIDRangeStart
[i] En matris med ObjectID
värden, som var och en är den nya startadressen (efter skräpinsamling) för ett block med sammanhängande, levande objekt i minnet.
cObjectIDRangeLength
[i] En matris med heltal, var och en är storleken på ett block med sammanhängande objekt i minnet.
En storlek anges för varje block som refereras till i matriserna oldObjectIDRangeStart
och newObjectIDRangeStart
.
Kommentarer
En komprimerande skräpsamlare återtar minnet som upptas av döda föremål och komprimerar som frigör utrymme. Därför kan levande objekt flyttas inom heapen, och ObjectID
värden som distribuerats av tidigare meddelanden kan ändras.
Anta att ett befintligt ObjectID
värde (oldObjectID
) ligger inom följande intervall:
oldObjectIDRangeStart[i]
<= oldObjectID
<oldObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
I det här fallet är förskjutningen från början av intervallet till början av objektet följande:
oldObjectID
- oldObjectRangeStart[i]
För alla värden i
för detta ligger i följande intervall:
0 <= i
<cMovedObjectIDRanges
du kan beräkna det nya ObjectID
på följande sätt:
newObjectID
= newObjectIDRangeStart[i]
+ (oldObjectID
– oldObjectIDRangeStart[i]
)
Inget av de värden som ObjectID
skickas MovedReferences2
är giltiga under återanropet, eftersom skräpinsamlaren kan vara mitt i att flytta objekt från gamla platser till nya platser. Profilerare bör därför inte försöka inspektera objekt under ett MovedReferences2
anrop. Ett ICorProfilerCallback2::GarbageCollectionFinished-återanrop anger att alla objekt har flyttats till sina nya platser och att inspektion kan utföras.
Om profileraren implementerar både ICorProfilerCallback - och ICorProfilerCallback4-gränssnittenMovedReferences2
anropas metoden före metoden ICorProfilerCallback::MovedReferences , men bara om MovedReferences2
metoden returneras korrekt. Profilerare kan returnera en HRESULT som indikerar ett fel från MovedReferences2
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