2011-05-18 26 views
0

我有這個應用程序寫在VB.Net與winforms顯示一些統計數據和圖片在大屏幕顯示器上。我也通過使用這個來監視傷心應用程序的內存使用情況。Memoryusage在一週後下降

Process.WorkingSet64 

我知道Windows系統不報告正確的用法,但我只是想知道,如果我沒有任何一點的內存泄漏我有,但現在都解決了。但第一週的內存使用量約爲100MB,第二週的內存使用量約爲50MB。

那麼爲什麼它在運行完全相同的代碼時突然下降? 我很難想象垃圾收集器會在這個晚期啓動,因爲應用程序每10秒刷新一次,並且在這段時間之間有足夠的時間來完成它。

或者也許有更好的方法來獲得更可靠的進程的內存使用情況。

+1

工作集是映射到物理內存的進程內存量。由於Windows決定分頁不近期使用的頁面(可能滿足一些其他需求),它可能會下降,並且如果需要它們只會被拉回到物理內存中。 「windows並不總是報告正確的用法」:錯誤的,Windows正確地報告事情,但理解計數器的實際意義並不容易(顯而易見通常是錯誤的)。 – Richard 2011-05-18 11:44:05

+0

你爲什麼發表評論而不是答案? – chrissie1 2011-05-18 12:09:08

+0

因爲這不是「爲什麼發生」的答案,所以你問。 – Richard 2011-05-18 12:15:04

回答

4

Process.WrokingSet64不報告的內存使用,它省略了交換到磁盤的內存:

此屬性的返回值表示進程使用的工作集內存的當前大小。進程的工作集是物理RAM內存中進程當前可見的一組內存頁。這些頁面是駐留的,可供應用程序使用,而不會觸發頁面錯誤。 (MSDN

即使你的系統是可用內存從未低,你可能已經最小化的應用程序窗口,從而導致Windows以trim its working set

如果你想查找內存泄漏,你應該使用Process.PrivateMemorySize64來代替。你的共享內存將只包含可執行代碼,並且在整個生命週期中它將保持或多或少不變,所以你應該關注私有內存。