Aracılığıyla paylaş


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 , newObjectIDRangeStartve cObjectIDRangeLength dizilerinin oldObjectIDRangeStarttoplam 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] + (oldObjectIDoldObjectIDRangeStart[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

Ayrıca bkz.