Bagikan melalui


Metode ICorProfilerCallback::MovedReferences

Dipanggil untuk melaporkan tata letak objek baru di tumpukan sebagai hasil dari pengumpulan sampah yang padat.

Sintaks

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

Penting

Metode ini melaporkan ukuran sebagai MAX_ULONG untuk objek yang lebih besar dari 4 GB pada platform 64-bit. Untuk mendapatkan ukuran objek yang lebih besar dari 4 GB, gunakan metode ICorProfilerCallback4::MovedReferences2 sebagai gantinya.

Pengumpul sampah padat merebut kembali memori yang ditempati oleh benda mati dan compact yang mengosongkan 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] + (oldObjectIDoldObjectIDRangeStart[i])

Tidak ada nilai ObjectID yang dilewatkan MovedReferences valid selama panggilan balik itu sendiri, karena pengumpulan sampah mungkin berada di tengah-tengah memindahkan objek dari lokasi lama ke lokasi baru. Oleh karena itu, profiler tidak boleh mencoba memeriksa objek selama panggilan MovedReferences. Panggilan balik ICorProfilerCallback2::GarbageCollectionFinished menunjukkan bahwa semua objek telah dipindahkan ke lokasi barunya dan inspeksi dapat dilakukan.

Persyaratan

Platform: Lihat Persyaratan Sistem.

Header: CorProf.idl, CorProf.h

Pustaka: CorGuids.lib

Versi .NET Framework: Tersedia mulai dari 2.0

Lihat juga