Metode ICorProfilerCallback4::MovedReferences2
Dipanggil untuk melaporkan tata letak objek baru di tumpukan sebagai hasil dari pengumpulan sampah yang padat. Metode ini dipanggil jika profiler telah mengimplementasikan antarmuka ICorProfilerCallback4. Panggilan balik ini menggantikan metode ICorProfilerCallback2::SurvivingReferences, karena dapat melaporkan rentang objek yang lebih besar yang panjangnya melebihi apa yang dapat diekspresikan dalam ULONG.
Sintaks
HRESULT MovedReferences2(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] SIZE_T cObjectIDRangeLength[] );
Parameter
cMovedObjectIDRanges
[in] Banyaknya blok benda berdekatan yang bergerak sebagai hasil pengumpulan sampah yang padat. Artinya, nilai cMovedObjectIDRanges
adalah total ukuran array oldObjectIDRangeStart
, newObjectIDRangeStart
, dan cObjectIDRangeLength
.
Tiga argumen MovedReferences2
berikutnya berupa array paralel. Dengan kata lain, oldObjectIDRangeStart[i]
, newObjectIDRangeStart[i]
, dan cObjectIDRangeLength[i]
semua menyangkut satu blok objek yang berdekatan.
oldObjectIDRangeStart
[in] Array nilai ObjectID
, yang masing-masing adalah alamat awal lama (pengumpulan pra-sampah) dari blok objek langsung yang berdekatan dalam memori.
newObjectIDRangeStart
[in] Array nilai ObjectID
, yang masing-masing adalah alamat awal baru (pengumpulan pasca-sampah) dari blok objek langsung yang berdekatan dalam memori.
cObjectIDRangeLength
[in] Array bilangan bulat, yang masing-masing adalah ukuran blok objek berdekatan dalam memori.
Ukuran ditentukan untuk setiap blok yang dirujuk dalam array oldObjectIDRangeStart
dan newObjectIDRangeStart
.
Keterangan
Seorang pengumpul sampah yang padat merebut kembali memori yang ditempati oleh objek mati dan compact yang membebaskan ruang. Akibatnya, objek langsung mungkin dipindahkan dalam tumpukan, dan nilai ObjectID
yang didistribusikan oleh pemberitahuan sebelumnya mungkin berubah.
Asumsikan bahwa nilai ObjectID
(oldObjectID
) berada dalam rentang berikut:
oldObjectIDRangeStart[i]
<= oldObjectID
<oldObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
Dalam hal ini, offset dari awal rentang hingga awal objek adalah sebagai berikut:
oldObjectID
- oldObjectRangeStart[i]
Untuk nilai i
apa pun yang berada dalam rentang berikut:
0 <= i
<cMovedObjectIDRanges
Anda dapat menghitung ObjectID
yang baru sebagai berikut:
newObjectID
= newObjectIDRangeStart[i]
+ (oldObjectID
– oldObjectIDRangeStart[i]
)
Tidak ada nilai ObjectID
yang melewati MovedReferences2
valid selama panggilan balik itu sendiri, karena pengumpulan sampah mungkin berada di tengah-tengah pemindahan objek dari lokasi lama ke lokasi baru. Oleh karena itu, profiler tidak boleh mencoba memeriksa objek selama panggilan MovedReferences2
. Panggilan balik ICorProfilerCallback2::GarbageCollectionFinished menunjukkan bahwa semua objek telah dipindahkan ke lokasi barunya dan inspeksi dapat dilakukan.
Jika profiler mengimplementasikan antarmuka ICorProfilerCallback dan ICorProfilerCallback4, metode MovedReferences2
dipanggil sebelum metode ICorProfilerCallback2::SurvivingReferences, tetapi hanya jika MovedReferences2
berhasil ditampilkan. Profiler dapat menampilkan HRESULT yang menunjukkan kegagalan dari metode MovedReferences2
, untuk menghindari panggilan metode kedua.
Persyaratan
Platform: Lihat Persyaratan Sistem.
Header: CorProf.idl, CorProf.h
Pustaka: CorGuids.lib
Versi .NET Framework: Tersedia mulai dari 4.5
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk