Утечка памяти в приложении 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 не может затем собрать.