Bagikan melalui


Metode ICorProfilerCallback4::SurvivingReferences2

Melaporkan tata letak objek dalam timbunan sebagai akibat dari pengumpulan sampah yang tidak 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 SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                cObjectIDRangeLength[] );  

Parameter

cSurvivingObjectIDRanges
[in] Banyaknya blok benda berdekatan yang selamat akibat pengumpulan sampah yang tidak padat. Artinya, nilai cSurvivingObjectIDRanges adalah ukuran array objectIDRangeStart dan cObjectIDRangeLength, yang masing-masing menyimpan ObjectID dan panjang, untuk setiap blok objek.

Dua argumen SurvivingReferences2 berikutnya berupa array paralel. Dengan kata lain, objectIDRangeStart dan cObjectIDRangeLength menyangkut blok objek berdekatan yang sama.

objectIDRangeStart
[in] Array nilai ObjectID, yang masing-masing berupa alamat awal blok objek langsung yang berdekatan dalam memori.

cObjectIDRangeLength
[in] Array bilangan bulat, yang masing-masing adalah ukuran blok yang masih ada dari objek bersebelahan dalam memori.

Ukuran ditentukan untuk setiap blok yang dirujuk dalam array objectIDRangeStart.

Keterangan

Elemen array objectIDRangeStart dan cObjectIDRangeLength harus ditafsirkan sebagai berikut untuk menentukan apakah objek bertahan dari pengumpulan sampah. Asumsikan bahwa nilai ObjectID (ObjectID) berada dalam rentang berikut:

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Untuk nilai i apa pun yang berada dalam rentang berikut, objek telah bertahan dari pengumpulan sampah:

0 <= i<cSurvivingObjectIDRanges

Pengumpulan sampah yang tidak padat mengklaim kembali memori yang ditempati oleh objek "mati", tetapi tidak mamadatkan ruang kosong tersebut. Akibatnya, memori dikembalikan ke tumpukan, tetapi tidak ada objek "langsung" yang dipindahkan.

Runtime bahasa umum (CLR) memanggil SurvivingReferences2 untuk pengumpulan sampah yang tidak padat. Untuk memadatkan pengumpulan sampah, MovedReferences2 dipanggil. Pengumpulan sampah tunggal dapat dipadatkan untuk satu generasi dan tidak memadatkan untuk generasi lain. Untuk pengumpulan sampah pada generasi tertentu, profiler akan menerima panggilan balik SurvivingReferences2 atau panggilan balik MovedReferences2, tetapi tidak keduanya.

Beberapa panggilan balik SurvivingReferences2 mungkin diterima selama pengumpulan sampah tertentu, dikarenakan buffering internal yang terbatas, beberapa panggilan balik selama pengumpulan sampah server, dan alasan lainnya. Dalam kasus beberapa panggilan balik selama pengumpulan sampah, informasinya bersifat kumulatif; semua referensi yang dilaporkan dalam panggilan balik SurvivingReferences2 apa pun bertahan dari pengumpulan sampah.

Jika profiler mengimplementasikan antarmuka ICorProfilerCallback dan ICorProfilerCallback4, metode SurvivingReferences2 dipanggil sebelum metode ICorProfilerCallback2::SurvivingReferences, tetapi hanya jika SurvivingReferences2 berhasil ditampilkan. Profiler dapat menampilkan HRESULT yang menunjukkan kegagalan dari metode SurvivingReferences2 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