1

私が取り組んでいるプログラムがあり、かなり前にメモリリークを発見し、最初の問題を解決することができましたが、AForge.net ビデオプレーヤーがハンドルをリークしていることがわかりました。コントロールを破棄していますが、何らかの理由でハンドルが解放されません。

AForge.Net ビデオ コントロールを使用するウィンドウは、ポップアップしてユーザーに情報を伝えるバブルであり、ビデオ ソースが利用可能な場合は表示されます。ビデオ ソースを提供しない場合、ハンドルが解放されることがわかりました。しかし、ビデオ ストリームを表示するたびにハンドルが解放されず、最終的に 15,000 のハンドルに到達してアプリケーションがクラッシュし、AForge.NET が障害モジュールであることがわかります。

処分コードは以下のとおりです。

if (videoSourcePlayer != null)
{
if (videoSourcePlayer.VideoSource != null)
{
// clearing the event subscription
videoSourcePlayer.VideoSource.PlayingFinished -= VideoSource_PlayingFinished;

// remove refernce to video source
videoSourcePlayer.VideoSource = null;

}

if (videoSourcePlayer.IsRunning && _openVideoAlarmsCount < 1)
{
videoSourcePlayer.Stop();
}

if (videoSourcePlayer.IsRunning)
{
videoSourcePlayer.VideoSource.Stop();
}

videoSourcePlayer.Click -= videoSourcePlayer_Click;

// dispose video player
videoSourcePlayer.Dispose();
videoSourcePlayer = null;
}

videoSourcePlayer は WinForm のコントロールの名前です。正しく破棄されていると信じていますが、何を試してもハンドルを正しく解放できず、多くのコードを共有できませんが、答えようとすることができます問題の修正、または少なくともバグの特定に役立つ可能性のある質問。

注: Winforms + .NET 3.5 SP1 およびhttp://www.aforgenet.com/news/2012.02.23.releasing_framework_2.2.4.htmlの最新の AForge.net を使用しています。

助けてくれてありがとう!

4

0 に答える 0