2011-02-04 54 views
1

我知道有很多與此相關的問題,所以我會非常具體。 我使用兩條指令創建控制檯應用程序。用大容量創建一個列表並填充樣本數據,然後清除該列表或使其等於空。 我想知道的是,如果有一種方法可以讓我在調試過程中知道/測量/配置文件,如果列表中的應用程序使用的實際內存被清除並且null-ed與列表之前大致相同被創建和填充。我確信應用程序已經處理了這些信息,並且GC已經完成了收集,但是我可以肯定地知道我的應用程序在這之後會消耗多少內存? 我知道在填充列表的過程中,會分配大量內存,並且在內存被清除後,如果內存需要它可供其他進程使用,但是是否可以測量應用程序在結束? 謝謝.net memory measuring and profiling

編輯:好的,這是我的真實場景和目標。我工作的WPF應用程序可以通過USB設備讀取大量數據。在某些時候,應用程序會分配大約700多MB的內存來存儲所有的List數據,並將其解析,分析並寫入文件系統。當我將數據寫入文件系統時,我清除了所有的列表並處理了之前保存大數據的所有集合,因此我可以執行另一個數據處理。我想知道我不會遇到性能問題或最終耗盡所有內存。我用我的程序使用大量內存很好,但是我沒有用它完成所有的USB處理。 我該如何解決這個問題?在這種情況下使用內存或進程分析器?只需使用任務管理器,我看到我的應用程序佔用了800 MB的內存,但在清除收集後,內存保持不變。我知道這不會下降,除非Windows需要它,所以我想知道如果我可以確定內存已被清除並可以自由使用(通過我的應用程序或Windows)

回答

2

如果您指的是物理內存,則很難在Windows上測量「實際內存」使用情況。大多數likley你想要別的東西,如:

分配過程(見Zooba的答案)管理存儲的
  • 金額分配的內存
    1. 金額 - CLR探查器,或在這其中列出的任何其他探查 - Best .NET memory and performance profiler?
    2. 什麼任務管理器爲您的應用

    請注意,這是沒有必要的垃圾收集完成之後,您的過程(1)改變分配的內存量報告 - GC可能會保持分配的內存爲未來的管理分配(此行爲不是特定於CLR的內存分配 - 大多數內存分配器保留空閒塊供以後使用,除非被迫以某種方式釋放它)。有關GC /內存的詳細信息,http://blogs.msdn.com/b/maoni/博客非常有用。

  • 2

    Process Explorer會給你所有您需要的信息。具體而言,您可能最感興趣的是您的流程的「專用字節歷史記錄」圖。

    或者,可以使用Window的性能監視器來跟蹤您的特定應用程序。這應該給Process Explorer提供相同的信息,但它可以讓你將實際的數字寫入一個單獨的文件。

    Process Explorer window

    (A圖片,因爲我可以...)

    1

    我本人來說使用SciTech Memory Profiler
    它,你可以用它來查看您的內存使用量的實時選項。它幫助我發現了一些泄漏內存的問題。