測量 C# 物件的記憶體佔用
精確確定 C# 物件實例的記憶體使用情況對於效能調整和有效的記憶體管理至關重要。 儘管 C# 缺乏直接的內建函數,但我們可以利用未記錄的內部機制。
利用 CLR 內部資料
MSDN 雜誌對 CLR 內部結構的探索揭示了 TypeHandle
結構中的一個隱藏欄位「基本實例大小」。此欄位儲存物件的實例資料大小。
運用RuntimeTypeHandle
與反思
我們可以使用反射存取該欄位來取得物件的TypeHandle
。 以下程式碼說明如何擷取實例大小:
<code class="language-csharp">object obj = new List<int>(); RuntimeTypeHandle th = obj.GetType().TypeHandle; int size = *(*(int**)&th + 1); Console.WriteLine(size);</code>
重要注意事項:
此方法依賴內部 CLR 實作細節。 無法保證其在所有場景或未來 .NET 版本中的可靠性。 此外,欄位偏移量和資料類型在不同平台上可能會有所不同。
其他注意事項:
對於陣列和字串,基本實例大小僅反映對實際資料的引用的大小。 要計算總記憶體使用量,必須新增數組或字串中元素的大小。
以上是如何確定 C# 物件實例的大小(以位元組為單位)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!