Mengukur Jejak Memori Objek C#
Menentukan penggunaan memori contoh objek C# dengan tepat adalah penting untuk penalaan prestasi dan pengurusan memori yang berkesan. Walaupun C# tidak mempunyai fungsi terbina dalam langsung untuk ini, kami boleh memanfaatkan mekanisme dalaman yang tidak didokumenkan.
Menggunakan Data Dalaman CLR
Penjelajahan Majalah MSDN terhadap dalaman CLR mendedahkan medan tersembunyi, "Saiz Instance Asas," dalam struktur TypeHandle
. Medan ini menyimpan saiz data contoh objek.
Menggunakan RuntimeTypeHandle
dan Refleksi
Kita boleh mengakses medan ini menggunakan pantulan untuk mendapatkan TypeHandle
objek. Kod berikut menggambarkan cara untuk mendapatkan semula saiz contoh:
<code class="language-csharp">object obj = new List<int>(); RuntimeTypeHandle th = obj.GetType().TypeHandle; int size = *(*(int**)&th + 1); Console.WriteLine(size);</code>
Kaveat Penting:
Kaedah ini bergantung pada butiran pelaksanaan CLR dalaman. Kebolehpercayaannya tidak dijamin merentas semua senario atau versi .NET yang akan datang. Tambahan pula, ofset medan dan jenis data mungkin berbeza-beza merentas platform yang berbeza.
Perkara Tambahan yang Perlu Diperhatikan:
Untuk tatasusunan dan rentetan, saiz contoh asas hanya menggambarkan saiz rujukan kepada data sebenar. Untuk mengira jumlah penggunaan memori, saiz elemen dalam tatasusunan atau rentetan mesti ditambah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Saiz Contoh Objek C# dalam Bait?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!