Очистка ранее загруженных изображений в WinForm из ресурсов - PullRequest
0 голосов
/ 18 мая 2018

Цель моего приложения WinForm - загружать и отображать на короткое время случайно выбранный рисунок из определенной папки. Я делаю это с помощью PictureBox следующим образом (эта строка корректируется генератором случайных чисел для генерации другого имени файла с номером):

 pictureBox1.Image = Image.FromFile(@"C:\pics\1.png");

Через некоторое время он загружает другой файл изображения, но, глядя на Диагностический вид, я вижу, что объем памяти процесса увеличивается на прибл. 1 МБ с каждым загруженным изображением. Приблизительно после 100 изображений размер увеличивается на 100 МБ, хотя изображения были заменены. Один из таймеров, управляющих длительностью отображения, включает несколько методов, которые я нашел здесь, чтобы попытаться очистить изображение от ресурсов:

private void displayDuration(object sender, EventArgs e)
 {
  pictureBox1.Visible = false;
  pictureBox1.Image = null;
  pictureBox1.Invalidate();
  timer2.Enabled = false;
 }

но безрезультатно. Память продолжает увеличиваться, но функция Tick работает, так как установка видимости в false работает просто отлично.

Как правильно удалить это изображение из памяти, когда оно мне больше не нужно?

Я пытаюсь не включать ImageList, но если вы думаете, что это может решить эту проблему с памятью, я мог бы добавить ее в.

1 Ответ

0 голосов
/ 18 мая 2018

г.Реза Агаи был прав, Dispose () добился цели, я просто использовал это неправильно:

pictureBox1.Dispose();

, что просто испортило изображение Box.Утилизация изображения в pictureBox - правильный путь:

pictureBox1.Image.Dispose();

Я не должен был так рано отказываться от этого метода.Большое спасибо.

...