Metode ICorProfilerCallback2::SurvivingReferences
Melaporkan tata letak objek di tumpukan sebagai hasil dari pengumpulan sampah yang tidak padat.
Sintaks
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG
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 SurvivingReferences
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
Penting
Metode ini melaporkan ukuran sebagai MAX_ULONG
untuk objek yang lebih besar dari 4 GB pada platform 64-bit. Untuk objek yang lebih besar dari 4 GB, gunakan metode ICorProfilerCallback4::SurvivingReferences2 sebagai gantinya.
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 SurvivingReferences
untuk pengumpulan sampah yang tidak padat. Untuk memampatkan pengumpulan sampah, ICorProfilerCallback::MovedReferences dipanggil sebagai gantinya. Satu pengumpulan sampah dapat dipadatkan untuk satu generasi dan tidak memadatkan yang lain. Untuk pengumpulan sampah pada generasi tertentu, profiler akan menerima panggilan balik SurvivingReferences
atau panggilan balik MovedReferences
, tetapi tidak keduanya.
Beberapa panggilan balik SurvivingReferences
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 SurvivingReferences
apa pun bertahan dari pengumpulan sampah.
Persyaratan
Platform: Lihat Persyaratan Sistem.
Header: CorProf.idl, CorProf.h
Pustaka: CorGuids.lib
Versi .NET Framework: Tersedia mulai dari 2.0