Aracılığıyla paylaş


ICorProfilerCallback4::MovedReferences2 Yöntemi

Atık toplamanın sıkıştırılması sonucunda yığındaki nesnelerin yeni düzenini raporlamak için çağrılır. Profil oluşturucu ICorProfilerCallback4 arabirimini uyguladıysa bu yöntem çağrılır. Bu geri çağırma ICorProfilerCallback::MovedReferences yönteminin yerini alır, çünkü uzunlukları ULONG'da ifade edilebilecekleri aşan daha büyük nesne aralıklarını raporlayabilir.

Sözdizimi

HRESULT MovedReferences2(
    [in]  ULONG  cMovedObjectIDRanges,
    [in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] SIZE_T    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 MovedReferences2 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

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 MovedReferences2 değerlerin ObjectID hiçbiri geri çağırma sırasında geçerli değildir, çünkü çöp toplayıcı nesneleri eski konumlardan yeni konumlara taşımanın ortasında olabilir. Bu nedenle, profil oluşturucular bir MovedReferences2 ç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.

Profil oluşturucu hem ICorProfilerCallback hem de ICorProfilerCallback4 arabirimlerini uygularsa, MovedReferences2 yöntem ICorProfilerCallback::MovedReferences yönteminden önce çağrılır, ancak yalnızca yöntem başarıyla döndürülüyorsa MovedReferences2 çağrılır. Profil oluşturucular, ikinci yöntemi çağırmamak için yönteminden MovedReferences2 hata belirten bir HRESULT döndürebilir.

Gereksinimler

Platform: Bkz. Sistem Gereksinimleri.

Üstbilgi: CorProf.idl, CorProf.h

Kütüphane: CorGuids.lib

.NET Framework Sürümleri: 4.5'ten itibaren kullanılabilir

Ayrıca bakınız