Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Anggarkan Saiz Byte Objek C#?

Bagaimanakah Saya Boleh Anggarkan Saiz Byte Objek C#?

Mary-Kate Olsen
Lepaskan: 2025-01-10 15:37:47
asal
349 orang telah melayarinya

How Can I Estimate the Byte Size of C# Objects?

Anggaran saiz bait contoh objek C#

Soalan:

Menentukan saiz mana-mana contoh objek (termasuk koleksi, gabungan dan objek individu) ialah tugas biasa apabila mengurus saiz objek.

Penyelesaian:

Walaupun tiada kaedah rasmi, anda boleh memanfaatkan refleksi dan dalaman .NET tanpa dokumen untuk menganggarkan saiz objek:

object obj = new List<int>();
RuntimeTypeHandle th = obj.GetType().TypeHandle;
int size = *(*(int**) &th + 1);
Console.WriteLine(size);
Salin selepas log masuk

Penjelasan:

  • RuntimeTypeHandle Menyediakan akses kepada perwakilan dalaman sesuatu jenis.
  • Melalui operasi penunjuk, anda boleh mendapatkan semula medan Saiz Contoh Asas untuk menganggarkan saiz objek.
  • Untuk koleksi dan objek kompleks, anda mungkin perlu menganggarkan saiz elemen yang mengandungi secara rekursif.

Had:

  • Kaedah ini bergantung pada mekanisme dalaman yang tidak didokumenkan dan mungkin dipengaruhi oleh kemas kini .NET pada masa hadapan.
  • Ia mungkin tidak menggambarkan saiz objek dengan tepat untuk semua jenis (seperti tatasusunan, rentetan atau StringBuilder).
  • Ia menyediakan anggaran sahaja; penggunaan memori sebenar mungkin berbeza-beza.

Kaedah sambungan:

Untuk kemudahan, anda boleh mempertimbangkan untuk melaksanakan kaedah sambungan pada kelas Object untuk memudahkan pengambilan saiz:

public static int GetEstimatedByteSize(this object obj)
{
    RuntimeTypeHandle th = obj.GetType().TypeHandle;
    return *(*(int**) &th + 1);
}
Salin selepas log masuk

Sila ambil perhatian bahawa kaedah sambungan ini harus digunakan dengan berhati-hati dan tidak dijamin tepat untuk semua jenis dan senario.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Anggarkan Saiz Byte Objek C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan