我浏览了几页类似的查询,实施了大部分建议,但似乎找不到任何到目前为止有效的方法。希望我没有忽略一些显而易见的事情。
对,所以我使用 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(); }
}
只要窗口保持静止,内存使用量就非常稳定,但只要我抓住窗口窗体并开始移动它,内存使用量就会不断上升。我被引导相信它可能与图片框有关的原因是,一旦我将“stopCapturing”布尔值设置为 true,即使我在屏幕周围移动窗口,内存也会停止上升。“stopCapturing”不用于其他任何事情,并且事件继续正常触发,唯一的区别是图片框中显示的图像。我不知道原因,所以任何帮助将不胜感激。
PS:不确定是否相关,但我的工作站有 2 个屏幕。