【发布时间】:2015-02-15 21:27:43
【问题描述】:
我的应用程序从视频中读取帧(进行一些处理),然后将其显示在图片框中 - 这大约每秒完成 10 次,我现在遇到了图片框图像未正确处理的问题.
我遇到内存泄漏并最终出现内存不足异常。
//Check if PictureBox already contains an image, if so dispose of it.
if (VideoDisplay.Image != null)
{
VideoDisplay.Image.Dispose();
}
//set parameter to the new image
displayImage = OverlayImage.UpdateImage(eventArgs.Frame, WarningText, WarningBrush);
//set the picturebox to the new image
VideoDisplay.Image = displayImage;
//dispose of brush & start garbage collector
WarningBrush.Dispose();
GC.Collect();
通过注释掉VideoDisplay.Image = displayImage 行,内存泄漏停止(但显然我没有得到图像)。
只是想知道是否有人可以帮我解决这个问题,因为我以前从未处理过物品等,不知道我是否在处理时犯了错误或遗漏了什么。
【问题讨论】:
-
这里发生了什么
OverlayImage.UpdateImage? -
1.你为什么把刷子丢在这里?明明这段代码没有分配刷子,那代码在哪里呢? 2.
OverlayImage.UpdateImage(...)是做什么的?你能显示该方法的代码吗? 3. 您应该在处理它之前将图片框的图像拉出图片框,方法是将其抓取到局部变量中并将图片框的 Image 属性设置为 null。 4.您确定重新分配图片框的Image属性不会自行处理现有图像(我不知道,需要检查)吗? -
@LasseV.Karlsen 对于第 4 点,它没有。
-
我在这里处理刷子,因为这是最后一次使用它,因为我认为这是正确的做法,如果不是请纠正我。 OverlayImage.UpdateImage() 基本上将叠加层添加到当前帧并传回图像,我可以稍后获取代码(因为我不在我的电脑上),但我尝试设置 displayImage = eventArgs.Frame 仍然会导致内存泄漏。我将尝试您稍后提出的第 3 点,并让您知道我的结果。感谢您的反馈。
标签: c# image winforms memory-leaks idisposable