我已经浏览了几页类似的查询,实现了大部分建议,但似乎无法找到迄今为止工作的任何内容。希望我没有忽略明显的东西。C#Picturebox内存泄漏
对,所以我使用AForge.net捕捉图像。它提供了一个事件,它触发每个新帧接收,这在我的代码如下所示:
private void videoSourcePlayer_NewFrame(object sender, ref Bitmap image)
{
framesRecieved++;
try
{
if (!stopCapturing)
{
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
}
pictureBox1.Image = image.Clone(new Rectangle(0, 0, image.Width, image.Height), image.PixelFormat);
}
}
catch { }
finally { GC.Collect(); }
}
内存使用情况非常稳定,只要窗口保持静止,但只要我抓住窗口形式并开始移动它,内存使用量不断增加。我之所以被认为可能与picturebox有关,是因为只要我将“stopCapturing”布尔变为true,即使我在屏幕上移动窗口,内存也会停止上升。 “stopCapturing”不用于其他任何事情,并且事件继续正常触发,唯一的区别是正在显示在图片框中的图像。我对这个原因感到茫然,所以任何帮助将不胜感激。
PS:不确定它是否相关,但我的工作站有2个屏幕。
首先删除空捕获和GC.Collect。 – 2013-03-21 10:01:34
不确定是否需要克隆。我以前使用过'新的位图(图片)'没有问题。 – 2013-03-21 12:52:08