3

多くの場合に多くのバックグラウンド ワーカー スレッドを使用するプログラム (フォーム) があります (それらを再利用することはできません)。

プログラムのメモリが増え続けていることに気付き、これをメモリ プロファイラで分析したところ、多くのバックグラウンド ワーカー オブジェクトがあることに気付きました。

「using」ステートメントを使用すると、トリックが実行され、オブジェクトが破棄されると思いましたが、機能していないようです。

using (BackgroundWorker bgwConnectClient = new BackgroundWorker())
{
    bgwConnectClient.DoWork += new DoWorkEventHandler(bgwConnectClient_DoWork);
    bgwConnectClient.RunWorkerAsync();
}

何か案が??

4

1 に答える 1

3

オブジェクトがイベントにフックされているため、メモリ リークが発生しています。コードを変更する必要があります

BackgroundWorker bgwConnectClient = new BackgroundWorker();
bgwConnectClient.DoWork += new DoWorkEventHandler(bgwConnectClient_DoWork);
bgwConnectClient.RunWorkerAsync();

作業が完了し、bgwConnect が不要になった後

これを行う

bgwConnectClient.DoWork -= new DoWorkEventHandler(bgwConnectClient_DoWork);
于 2013-09-05T05:19:28.977 に答える