我是一個相對較低級的程序員。我的應用程序使用VS2008
並使用VS2008
編寫,並以.net 3.5爲目標。這是一個相當大的程序(按我的標準)大約200個表格+ 30個類別和50K行代碼。程序的一部分從文本文件導入數據,計算一堆東西,並將結果寫入Access數據庫。
根據文本文件中的行數,導入過程通常可以運行20分鐘或更長時間。最終,程序崩潰了,我得到了「錯誤創建窗口句柄錯誤 - 總是在我的代碼中的不同位置。當它運行時,它似乎也不斷變慢。」(我的操作系統是XP w/SP3 ,32位,3Gig RAM,如果有問題的話,我的W7 64位機器上配備4Gig RAM也會發生這種問題
我已經閱讀了錯誤,並且已經使用任務管理器完成了一些偵測工作,遇到內存泄漏。下面是一些我收集到的數據。
startup - memory usage = 48M/Handles = 428/Threads = 17/User Objects = 111
1 minute memory usage = 65M/Handles = 520/Threads = 22/User Objects = 523
2 minutes memory usage = 81M/Handles = 520/Threads = 19/User Objects = 952
3 minutes memory sage = 98M/Handles = 510/Threads = 19/User Objects = 1359
4 minutes memory usage = 113M/Handles = 510/Threads = 18/User Objects = 1766
這樣繼續下去,直到程序崩潰..
˚F rom尋找網絡上的答案。我期待看到越來越多的句柄引起這個問題。看來問題是用戶對象的數量正在消耗我的內存,也許這最終導致崩潰?發生崩潰時,內存使用量通常在450M到600M之間。
我已經嘗試在數據處理過程中多次調用的其中一個類中添加一些.Dispose()代碼,但這沒有任何效果。 (也許是因爲我沒有做正確的......)
- 是否越來越多的對象/內存使用情況導致該問題?
- 如何找出User Object(類或表單?)正在增長的內容?
- 一旦我找到它,我該如何解決它?
任何建議將受到歡迎。
抓住這個 - http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/ – 2013-03-27 14:31:24