我正在用 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
.
我的疑问是:
在某些计算机中,这种绘制方式会产生非常高的内存泄漏。相机配置为:640x480,如果更高,内存泄漏会增加。
电脑配置:
Intel i5:内存泄漏到 500Mb
Intel 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;
}
我不明白为什么我在某些计算机中存在内存泄漏,而在其他计算机中没有...请提供任何建议?
注意:内存泄漏仅在 Visual Studio 2010 的发布模式下发生,而不是在调试时发生。
注意2:我认为问题来自于FromBimapImage
,因为我尝试了一个WindowsForms
应用程序而不是一个应用程序WPF
并且没有内存泄漏......