我们有一个程序(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/

10-13 06:37