2012-07-20 122 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