Aracılığıyla paylaş


ICorProfilerCallback4::MovedReferences2 Yöntemi

Atık toplamayı sıkıştırmanın bir sonucu olarak 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ü ULONG'da ifade edilebilecek uzunlukları 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 sonucunda taşınan bitişik nesne bloklarının sayısı. Başka bir ifadeyle değeri cMovedObjectIDRanges , newObjectIDRangeStartve cObjectIDRangeLength dizilerinin oldObjectIDRangeStarttoplam boyutudur.

öğesinin sonraki üç bağımsız değişkeni MovedReferences2 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

Sıkıştırma atık toplayıcısı, ölü nesnelerin kapladığı belleği geri alır ve alan boşaltan sıkıştırı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.

Var olan 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 için aşağıdaki aralıktadır:

0 <= i<cMovedObjectIDRanges

yeniyi ObjectID aşağıdaki gibi hesaplayabilirsiniz:

newObjectID = newObjectIDRangeStart[i] + (oldObjectIDoldObjectIDRangeStart[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öntemin çağrılmasını önlemek için yönteminden MovedReferences2 hata belirten bir HRESULT döndürebilir.

Gereksinimler

Platform: Bkz. Sistem Gereksinimleri.

Üstbilgi: CorProf.idl, CorProf.h

Kitaplığı: CorGuids.lib

.NET Framework Sürümleri: 4.5 sürümünden itibaren kullanılabilir

Ayrıca bkz.