首頁 >後端開發 >C++ >如何估計 C# 物件的位元組大小?

如何估計 C# 物件的位元組大小?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 15:37:47282瀏覽

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

C# 物件實例位元組大小估算

問題:

決定任意物件實例的大小(包括集合、組合和單一物件)是管理物件大小時的常見任務。

解:

雖然沒有官方方法,但您可以利用反射和未公開的 .NET 內部機制來估算物件大小:

<code class="language-csharp">object obj = new List<int>();
RuntimeTypeHandle th = obj.GetType().TypeHandle;
int size = *(*(int**) &th + 1);
Console.WriteLine(size);</code>

解釋:

  • RuntimeTypeHandle 提供對類型內部表示的存取。
  • 透過指標操作,您可以檢索「基本實例大小」字段,從而估算物件大小。
  • 對於集合和複雜對象,您可能需要遞歸地估算包含元素的大小。

限制:

  • 此方法依賴未公開的內部機制,並可能受未來 .NET 更新的影響。
  • 它可能無法準確反映所有類型(例如陣列、字串或 StringBuilder)的物件大小。
  • 它只提供估算值;實際記憶體使用情況可能會有所不同。

擴充方法:

為方便起見,您可以考慮在 Object 類別上實作一個擴充方法來簡化大小檢索:

<code class="language-csharp">public static int GetEstimatedByteSize(this object obj)
{
    RuntimeTypeHandle th = obj.GetType().TypeHandle;
    return *(*(int**) &th + 1);
}</code>

請注意,此擴充方法應謹慎使用,並且不能保證對所有類型和場景都準確。

以上是如何估計 C# 物件的位元組大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn