|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.04.2015, 15:17 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Утечка памяти
У меня на форме есть компонент TImage.
При событиях OnClick и OnMouseMove происходит наложение изображений с помощью Canvas.Draw (позиционное наложение маленьких изображений). В диспетчере задач память процесса постоянно увеличивается, даже если я только вожу мышью по TImage. То есть утечка памяти происходит именно по изображениям. Память освобождается при сворачивании окна программы. Первое, что мне пришло в голову - периодическая очищать Picture (Image1.Picture:=nil), и наносить новые изображения; но при обнулении Picture память процесса всё равно не освобождается. Использование Destroy и Free (как для Picture, так и для Canvas) выпадает EAccessViolation. "Canvas:=nil;" компилятор не пропускает. Как мне освобождать память ? Периодически сворачивать и разворачивать форму - самый рабочий, но самый некрасивый вариант, к тому же неудобный с точки зрения реализации интерфейса.
Подпись ? Не, не слышал ...
|
08.04.2015, 15:25 | #2 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
|
|
08.04.2015, 17:22 | #3 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
Может можно как то по другому ?
Подпись ? Не, не слышал ...
|
|
08.04.2015, 17:35 | #4 |
Старожил
Регистрация: 19.06.2013
Сообщений: 2,463
|
А на сколько это опасно?
Репутация: полный "0"
|
08.04.2015, 20:40 | #5 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
В моём случае только водить мышью по TImage нужно будет порядка минимум часа.
Программа запускается уже с 10 мегабайтами. Если мышкой постоянно водить по полю, то каждую секунду добавляется порядка 500 килобайт. Несложно посчитать, что после часа, проведённого в этом приложении размер процесса в оперативной памяти будет занимать порядка 2 гигабайт. Это если не сворачивать окно. Это очень опасный баг, и как его устранить - я не знаю.
Подпись ? Не, не слышал ...
|
08.04.2015, 20:43 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А можно на код взглянуть?
I'm learning to live...
|
08.04.2015, 22:12 | #7 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Проект (шахматы).7z , ссылка на Google диск.
Это весь проект; всё, что можно, имеет комментарии. Проблема с прорисовкой фигур: фигуры рисуются, но, как я писал, засоряют память; освобождаются только при сворачивании окна программы.
Подпись ? Не, не слышал ...
|
09.04.2015, 06:49 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Сразу в лоб два глупых вопроса:
1) А чего не выбрал в качестве канвы DrawGrid? 2) В GetImage есть строка: Цитата:
Вот тебе и утечка. Переделывай работу с GetImage.
I'm learning to live...
|
|
09.04.2015, 14:17 | #9 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
A c DrawGrid больше мороки с его свойствами и методами; в моём случае легче руководствоваться явной привязкой индексов матрицы к координатам на TImage.Canvas. --- На счёт GetImage: везде, где вызывалась эта функция - результат возвращался сразу в Image.Canvas, результат прорисовывался, правда экземпляр объекта никуда не девался. Вот я и получил утечку. Спасибо за помощь, ссылка на скачивание архива более недоступна, вопрос закрыт.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 09.04.2015 в 14:47. |
|
09.04.2015, 14:25 | #10 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Я бы так не делал.
I'm learning to live...
|
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Утечка памяти | Vlad2891 | Общие вопросы Delphi | 11 | 27.02.2015 16:06 |
Утечка памяти :( | batnik.com | C++ Builder | 1 | 09.05.2013 18:09 |
утечка памяти | Кудаив | Помощь студентам | 1 | 30.04.2012 18:18 |
Утечка памяти | Juffin | Общие вопросы Delphi | 3 | 02.11.2010 12:11 |
утечка памяти в С++ | vengo | Общие вопросы C/C++ | 9 | 10.06.2008 21:24 |