ICorProfilerCallback::MovedReferences Yöntemi
Atık toplama sıkıştırmasının bir sonucu olarak yığındaki nesnelerin yeni düzenini raporlamak için çağrılır.
Sözdizimi
HRESULT MovedReferences(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ULONG cObjectIDRangeLength[] );
Parametreler
cMovedObjectIDRanges
[in] Sıkıştırma çöp toplama sonucu taşınan bitişik nesne bloklarının sayısı. Başka bir ifadeyle cMovedObjectIDRanges
değeri , newObjectIDRangeStart
ve cObjectIDRangeLength
dizilerinin oldObjectIDRangeStart
toplam boyutudur.
'nin MovedReferences
sonraki üç bağımsız değişkeni paralel dizilerdir. Başka bir deyişle, oldObjectIDRangeStart[i]
, newObjectIDRangeStart[i]
ve cObjectIDRangeLength[i]
tümü tek bir bitişik nesne bloğunu ilgilendiriyor.
oldObjectIDRangeStart
[in] Her biri ObjectID
bellekteki bitişik, canlı nesneler bloğunun eski (çöp toplama öncesi) başlangıç adresi olan bir değer dizisi.
newObjectIDRangeStart
[in] Her biri ObjectID
, bellekteki bitişik, canlı nesneler bloğunun yeni (çöp toplama sonrası) başlangıç adresi olan bir değer dizisi.
cObjectIDRangeLength
[in] Her biri bellekteki bitişik nesne bloğunun boyutu olan tamsayı dizisi.
ve newObjectIDRangeStart
dizilerinde oldObjectIDRangeStart
başvuruda bulunan her blok için bir boyut belirtilir.
Açıklamalar
Önemli
Bu yöntem, 64 bit platformlarda MAX_ULONG
4 GB'tan büyük nesneler için boyutları bildirir. 4 GB'tan büyük nesnelerin boyutunu almak için, bunun yerine ICorProfilerCallback4::MovedReferences2 yöntemini kullanın.
Sıkıştırma çöp toplayıcısı, ölü nesnelerin kapladığı belleği geri alır ve alan boşaltan sıkıştırıcılar. Sonuç olarak, canlı nesneler yığın içinde taşınabilir ve ObjectID
önceki bildirimler tarafından dağıtılan değerler değişebilir.
Mevcut ObjectID
bir değerin (oldObjectID
) aşağıdaki aralık içinde olduğunu varsayalım:
oldObjectIDRangeStart[i]
<= oldObjectID
<oldObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
Bu durumda, aralığın başından nesnenin başlangıcına kadar olan uzaklık aşağıdaki gibidir:
oldObjectID
- oldObjectRangeStart[i]
Aşağıdaki aralıktaki herhangi bir değeri i
için:
0 <= i
<cMovedObjectIDRanges
yeniyi ObjectID
aşağıdaki gibi hesaplayabilirsiniz:
newObjectID
= newObjectIDRangeStart[i]
+ (oldObjectID
– oldObjectIDRangeStart[i]
)
Tarafından geçirilen MovedReferences
değerlerin ObjectID
hiçbiri geri çağırma sırasında geçerli değildir, çünkü çöp toplama eski konumlardan yeni konumlara nesneleri taşımanın ortasında olabilir. Bu nedenle, profil oluşturucular bir MovedReferences
çağrı sırasında nesneleri incelemeye çalışmamalıdır. ICorProfilerCallback2::GarbageCollectionFinished geri çağırması, tüm nesnelerin yeni konumlarına taşındığını ve inceleme gerçekleştirilebileceğini gösterir.
Gereksinimler
Platform: Bkz. Sistem Gereksinimleri.
Üstbilgi: CorProf.idl, CorProf.h
Kitaplığı: CorGuids.lib
.NET Framework Sürümleri: 2.0 sürümünden itibaren kullanılabilir