我们有一个程序(Form),它在很多情况下使用了很多后台工作线程(我们不能重用它们)。
我们注意到程序的内存不断增长,并使用内存分析器对此进行分析。我注意到有许多后台工作对象。
我认为如果我使用“using”语句可以解决问题并处理对象,但它似乎不起作用。
using (BackgroundWorker bgwConnectClient = new BackgroundWorker())
{
bgwConnectClient.DoWork += new DoWorkEventHandler(bgwConnectClient_DoWork);
bgwConnectClient.RunWorkerAsync();
}
任何的想法??
最佳答案
你有内存泄漏,因为你的对象被连接到一个事件。你需要改变你的代码
BackgroundWorker bgwConnectClient = new BackgroundWorker();
bgwConnectClient.DoWork += new DoWorkEventHandler(bgwConnectClient_DoWork);
bgwConnectClient.RunWorkerAsync();
在您完成工作并且不再需要 bgwConnect 后
做这个
bgwConnectClient.DoWork -= new DoWorkEventHandler(bgwConnectClient_DoWork);
关于c# - 后台 worker 内存泄漏和 "using"语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18628141/