Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Atık toplamanın sıkıştırılması sonucunda 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 , newObjectIDRangeStartve cObjectIDRangeLength dizilerinin oldObjectIDRangeStarttoplam boyutudur.
öğesinin 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 ilgilendirir.
oldObjectIDRangeStart [in] Her biri ObjectID bellekteki bitişik, canlı nesneler bloğunun eski (atık toplama öncesi) başlangıç adresi olan bir değer dizisi.
newObjectIDRangeStart [in] Her biri ObjectID , bellekteki bitişik, canlı nesneler bloğunun yeni (atık toplama sonrası) başlangıç adresi olan bir değer dizisidir.
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 4 GB'tan büyük nesneler için boyutları MAX_ULONG 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ılır. 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]
Bunun herhangi bir değeri i aşağıdaki aralıktadır:
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
Kütüphane: CorGuids.lib
.NET Framework Sürümleri: 2.0'dan itibaren kullanılabilir