2008-10-21 49 views
6

我在運行時有一個靜態對象,基本上是其他對象(整數,字符串,字典,其他對象等)的列表。有沒有辦法在運行時確定我的靜態「其他對象列表」對象所使用的內存?這對於儀器和報告目的會很方便。.NET運行時對象的內存佔用情況如何?

回答

2

你可能會問的東西,你可以從你的代碼(這是我想太多知道)打電話,但我覺得我應該提到螞蟻的情況下,別人探查[http://www.red-gate.com/Products/ants_profiler/index.htm]是不是在找具體的東西。它會告訴你關於你的代碼的所有信息,包括正在使用多少內存。

從他們的網站...

檔案存儲,瞭解您 應用程序如何使用內存,並找到 內存泄漏。該內存分析器 可以讓你在你的 程序的執行任何 點拍攝快照,所以你可以看到什麼樣的內存是在這一點上使用 。您可以在不同時間拍攝 多個快照 而您的應用程序正在運行,所以 您可以比較應用程序內存 的狀態。

+0

我確實在尋找一個編程實現。但我同意螞蟻探查器可以在正確的情況下得心應手:) – Bullines 2008-10-21 20:38:55

3

的sizeof可以在值類型中使用也有Marshal.SizeOf可與一些提示用於.NET:

http://www.pixelicious.net/2008/07/03/exception-trying-to-get-the-size-of-a-c-class-using-marshalsizeof

不過...。那是不完全的總因爲運行時確實爲同步塊等事物分配了額外的字節。

如果你在衡量這種類型的東西很感興趣,但是,你應該使用分析API:

http://msdn.microsoft.com/en-us/library/ms404386.aspx

或者像的WinDbg,可以做各種美妙的事情一個免費的工具。

1

不是沒有探查器。僅僅爲了一個班而已經很難 - 參見here

2

嘗試SOS調試庫。這是最好的。 文章herehere

0

感謝您的回覆。我認爲我最初的攻擊計劃,因爲我相信大多數對象都是可序列化的,將會是這樣的:

using (MemoryStream memstream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 

    try 
    { 
     formatter.Serialize(memstream, myObjectOfObjects); 
     mem_footprint += memstream.Length; 
    } 
    catch 
    { 
     // not a serializable object 
    } 
} 
相關問題