【发布时间】:2015-09-29 08:51:42
【问题描述】:
在将此线程标记为重复之前,请考虑到我已经尝试调试以下代码几天了,但似乎仍然找不到解决方案。
我正在开发一个具有一个公共方法的相机类:返回当前帧。在后台,每次发生新的帧事件时,它都会不断更新当前帧(请参见下面的代码)。
通过注释掉代码,我得出的结论是这里发生了泄漏:this.currentFrame = (Bitmap)eventArgs.Frame.Clone();。此外,我在 Visual Studio 中进行了一些内存性能诊断,似乎this.currentFrame 对象的大小一直在增长(似乎与链表类似)。
我想我的问题是为什么this.currentFrame 会增长?我正在使用Image.Clone() 方法,所以没有其他东西应该指代它所指的内存空间。另外,在我更新它之前,我让它参考null以防万一。那么为什么当this.currentFrame 指针指向一个新的内存位置时它没有被垃圾回收呢?
我怀疑 AForge 代码中存在错误...我知道这可能是我的代码中的一些小问题,但我看不到它...
public WebCamClass(VideoCaptureDevice camera)
{
this.cam = camera;
this.currentFrame = new Bitmap(Project.Properties.Resources.defaultImage);
this.cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
this.cam.Start();
}
private VideoCaptureDevice cam;
private Bitmap currentFrame;
private void cam_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
this.currentFrame = null;
this.currentFrame = (Bitmap)eventArgs.Frame.Clone();
}
public Image saveFrame()
{
return this.currentFrame;
}
我也试过了,但没有成功:
public Image saveFrame()
{
return (Bitmap)this.currentFrame.Clone();
}
【问题讨论】:
标签: c# winforms memory-leaks aforge