我正在开发的C#应用程序,我开发了做一些东西与库Aforge
相机。 其中一点是简单地捕捉到了什么是在网络摄像头前的图像,并显示在一个特定的PictureBox
可以这样做:
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
。
我的疑问是:
在某些计算机,绘画这种方式产生了非常高的内存泄漏。 相机的配置是:640×480,并且如果它是较高的,内存泄漏增加。
电脑配置:
英特尔酷睿i5:内存泄漏为500MB
英特尔酷睿i7:没有内存泄漏。
双心(没那么强大):没有那么多内存泄漏。
编辑:
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;
}
我不明白为什么我有一些电脑和其他人没有内存泄漏...任何建议吗?
注意:内存泄漏只在Release模式发生在Visual Studio 2010中,但不是在调试。
注2:我觉得这个问题自带FromBimapImage
,因为我尝试了WindowsForms
应用程序,而不是一个WPF
之一,没有内存泄漏...