我正在用C#開發一個應用程序,並且我開發了一個用Aforge
相機完成一些內容的庫。其中一點是簡單地捕捉到了什麼是在網絡攝像頭前的圖像,並顯示在一個特定的PictureBox
這樣做:AForge相機內存泄漏
camera.NewFrame += NewFrame;
private void NewFrame(object sender, NewFrameEventArgs args)
{
Bitmap newFrame = new Bitmap(args.Frame);
args.Frame.Dispose();
PictureBox.FromBitmapImage(newFrame);
newFrame.Dispose();
newFrame = null;
}
我做什麼在這裏,我得到的每一個幀,並將其繪製成PictureBox
。
我的疑問是:
在某些計算機,繪畫這種方式產生了非常高的內存泄漏。相機配置爲:640x480,如果更高,內存泄漏會增加。
計算機配置:
英特爾I5:內存泄漏爲500MB
英特爾I7: NO內存泄漏。
雙coeur(不那麼強大):沒有那麼多的內存泄漏。
編輯:
public static void FromBitmapImage(this Image image, Bitmap bitmap)
{
BitmapImage bitmapImage = new BitmapImage();
using (MemoryStream memoryStream = new MemoryStream())
{
bitmap.Save(memoryStream, ImageFormat.Bmp);
memoryStream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
image.Source = bitmapImage;
bitmapImage = null;
}
我不明白爲什麼我有一些電腦和其他人沒有內存泄漏...任何建議嗎?
注意:內存泄漏只發生在Visual Studio 2010上的發佈模式下,而不是在調試時發生。
NOTE2:我認爲問題自帶FromBimapImage
,因爲我嘗試了WindowsForms
應用程序而不是一個WPF
並沒有內存泄漏......
什麼是'PictureBox.FromBitmapImage(位圖)'方法,它返回什麼? – 2013-04-09 14:22:21