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
, newObjectIDRangeStart
ve cObjectIDRangeLength
dizilerinin oldObjectIDRangeStart
toplam 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]
+ (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ö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