Утечка памяти в приложении C# winforms на картинке

Мое приложение читает кадры из видео (выполняет некоторую обработку), а затем отображает его в графическом окне - это происходит примерно 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 Строка утечки памяти останавливается (но, очевидно, я не получаю изображение).

Просто подумал, может ли кто-нибудь помочь мне с этим, поскольку я никогда раньше не занимался утилизацией предметов и т. Д., И не знаю, допустил ли я ошибку в утилизации или что-то упустил.

2 ответа

Прежде чем обновлять изображение, вам необходимо его утилизировать. У меня была похожая проблема.
Вот так:

VideoDisplay.Image.Dispose();

После этой строки кода обновите изображение.Для вашего сценария:

VideoDisplay.Image = displayImage;

Найденный ответ получился, удалив VideoDisplay.Dispose(), это исправило. При быстром поиске этого, возможно, была установлена ​​блокировка объекта, который GC не может затем собрать.

Другие вопросы по тегам