[英]C#: Memory usage of an object
有沒有辦法找到特定對象使用了多少內存? 例如一個List。 考慮到所有因素,例如字符串實習以及編譯器/運行時環境/無論做什么。
ANTS Memory Profiler描述.NET代碼的內存消耗。 過去我用它取得了很好的成績。
你真的必須准確定義“特定對象使用了多少內存”的含義。 例如,你可能意味着“如果這個對象被垃圾收集,將釋放多少” - 或者你可能意味着“這個對象及其觸及的所有內容占用了多少內存。”
關於字符串實習的觀點就是一個很好的例子。 假設你這樣做:
List<string> internedStrings = new List<string>();
List<string> nonInternedStrings = new List<string>();
for (int i=0; i < 1000; i++)
{
string tmp = new string(' ', i+1);
nonInternedStrings.Add(tmp);
tmp = tmp.Intern();
internedStrings.Add(tmp);
}
難道nonInternedStrings
真的占用超過內存internedStrings
? 如果internedStrings
被垃圾收集,它就不會釋放那么多的內存 - 但是如果internedStrings
從未被創建過 (包括沒有實現其每個元素),那么就不會需要更多的內存。
如果您可以更准確地了解您的意思,我們可能會幫助您。 但這是一個復雜的問題。
這似乎是這個德爾菲問題的兄弟姐妹。 天真的算法不會考慮聚合和組合之間的差異。 即使是基於標記和掃描的算法也不會告訴您哈希表是否必須增長其內部數組,因為它引用了一個對象。 您可能最好在各種場景下分析應用程序,並將資源使用情況與N進行繪制,其中N是對數據集規模的一些衡量標准。
你試過CLR Profiler 2.0嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.