Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dipanggil untuk melaporkan tata letak objek baru dalam tumpukan sebagai hasil dari pengumpulan sampah yang memampatkan. Metode ini dipanggil jika profiler telah menerapkan antarmuka ICorProfilerCallback4 . Panggilan balik ini menggantikan metode ICorProfilerCallback::MovedReferences , karena dapat melaporkan rentang objek yang lebih besar yang panjangnya melebihi apa yang dapat diekspresikan dalam ULONG.
Syntax
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-parameternya
cMovedObjectIDRanges [di] Jumlah blok objek yang berdampingan yang bergerak sebagai hasil pengumpulan sampah yang memampatkan. Artinya, nilai cMovedObjectIDRanges adalah ukuran total array oldObjectIDRangeStart, , newObjectIDRangeStartdan cObjectIDRangeLength .
Tiga argumen MovedReferences2 berikutnya adalah array paralel. Dengan kata lain, oldObjectIDRangeStart[i], newObjectIDRangeStart[i], dan cObjectIDRangeLength[i] semua menyangkut satu blok objek yang bersebelahan.
oldObjectIDRangeStart [di] Array ObjectID nilai, yang masing-masing adalah alamat awal lama (pengumpulan pra-sampah) dari blok objek langsung yang berdampingan dalam memori.
newObjectIDRangeStart [di] Array ObjectID nilai, yang masing-masing adalah alamat awal baru (pasca-pengumpulan sampah) dari blok objek langsung yang berdampingan dalam memori.
cObjectIDRangeLength [di] Array bilangan bulat, yang masing-masing adalah ukuran blok objek yang berdampingan dalam memori.
Ukuran ditentukan untuk setiap blok yang dirujuk dalam oldObjectIDRangeStart array dan newObjectIDRangeStart .
Komentar
Pengumpul sampah yang memampatkan mengklaim kembali memori yang ditempati oleh objek mati dan padat yang membebaskan ruang. Akibatnya, objek langsung mungkin dipindahkan dalam tumpukan, dan ObjectID nilai yang didistribusikan oleh pemberitahuan sebelumnya mungkin berubah.
Asumsikan bahwa nilai yang ada ObjectID (oldObjectID) terletak 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 yang baru ObjectID sebagai berikut:
newObjectID
=
newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])
Tidak ada nilai yang ObjectID diteruskan oleh MovedReferences2 valid selama panggilan balik itu sendiri, karena pengumpul sampah mungkin berada di tengah-tengah memindahkan objek dari lokasi lama ke lokasi baru. Oleh karena itu, profiler tidak boleh mencoba memeriksa objek selama MovedReferences2 panggilan. Panggilan balik ICorProfilerCallback2::GarbageCollectionFinished menunjukkan bahwa semua objek telah dipindahkan ke lokasi barunya dan inspeksi dapat dilakukan.
Jika profiler mengimplementasikan antarmuka ICorProfilerCallback dan ICorProfilerCallback4 , MovedReferences2 metode dipanggil sebelum metode ICorProfilerCallback::MovedReferences , tetapi hanya jika MovedReferences2 metode berhasil dikembalikan. Profiler dapat mengembalikan HRESULT yang menunjukkan kegagalan dari MovedReferences2 metode , untuk menghindari panggilan metode kedua.
Persyaratan
Platform: Lihat Persyaratan Sistem.
Header: CorProf.idl, CorProf.h
Perpustakaan: CorGuids.lib
Versi .NET Framework: Tersedia sejak 4.5