2012-07-20 61 views
0

我有一個定時器每1/10秒運行一次(Interval = 100)。它處於一個無限循環中,因爲我想在我的WebBrowser控件上加載一個站點,並在每次加載時將信息轉換爲一個範圍ID。我的問題是如果這個進程運行很長時間,這將是一個內存泄漏。如何使用每1/10秒定時器清零定時器

在30分鐘內,內存使用量可以是800MB或更多。如何防止我的程序在運行時不斷使用更多的內存?

這是相關的代碼。它不包含任何流程創建代碼。

​​
+1

我不認爲你的問題是計時器,它看起來像你正在妥善處理你的計時器。 – CodingGorilla 2012-07-20 15:44:34

+1

6個問題和0個接受的答案。 – Paparazzi 2012-07-20 15:48:02

回答

4

memoryleaks的一個可能的來源是多個事件綁定。

每次調用GetItem方法時,都會綁定DocumentCompleted事件。 您應該綁定DocumentCompleted一次,例如在您的類的構造函數中。

但是,如果你只按一下按鈕,這不會是你的主要問題。

我想推薦.NET Memory Profiler 4.0來解決你的問題。

此外,我已經進一步搜索了一下,您的問題可能在於使用WebBrowser組件:請參閱this問題。

+0

對此答案+1,因爲不解開事件處理程序有時可能導致內存問題。 – 2012-07-20 15:45:48

0

這是你應該做的只有一次在創建時左右

webBrowser.DocumentCompleted += webBrowser_DocumentCompleted; 

這些可以被刪除。至少我認爲他們沒有任何意義,如果我讀你的代碼正確的timerLoad.Start()可能會出現問題

timerLoad.Dispose(); 
    timerLoad.Start(); 

;應該是一個Stop();當Tick加載文檔,然後應該停止工作,直到下一個按鈕點擊,對不對?

+0

單擊按鈕一次,程序將運行,直到無法從站點讀取數據,程序將停止。 – Mekhy 2012-07-20 15:58:11