Наткнулся на одно явление, решил описать себе на память и для общественности, может кому-то окажется полезным.
Всем известно что память надо чистить, и чем методичнее это делаешь тем лучше. И вот на днях Эксепшн по памяти вылез там, откуда я его не ожидал.
Итак задача: делаем приложение в котором есть PictureBox и ImageList, приложение «мониторит» определённые параметры и в зависимости от того чего «намониторило» меняет изображение в PictureBox на одно из коллекции ImageList.
Казалось бы, чего проще…
pictureBox1.Image = imageList1.Images[номер_картинки];
Но не тут то было, оказывается если сделать так определённое количество раз (довольно большое количество, но думаю зависит от размера изображений), то спустя некоторое время получим Ошибку по памяти. Судя по всему при таком способе память от предыдущего изображения остаётся занятой, при этом добавляется блок памяти под новое. Вообщем помогает это исправить Dispose().
Чтобы всё было хорошо, сколько бы изображение не менялось, делать надо так:
pictureBox1.Image.Dispose();
pictureBox1.Image = imageList1.Images[номер_картинки];
При таком варианте ошибок не возникает.
Вот-так. Век живи — век учись.
Комментарии (6)
RSS свернуть / развернутьА можете привести пример кода?
psyho
Процедурка прорисовывает выбранный элемент активным и предыдущий выбранный неактивным.
— В ImageList1 — изображения неактивных менюшек.
— В ImageList2 — изображения активных менюшек.
— num_prev_menu — индекс предыдущего выбранного пункта (для отмены выделения).
— num_menu — индекс текущего выбранного пункта меню (для выделения).
— Если убрать Dispose — и зажать кнопку перебора менюшек — спустя непродолжительное время получим memory error.
Roman
psyho
получаю NullReferenceException
psyho
Roman
psyho
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.