Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.16;
Скачать: CL | DM;

Вниз

Утечка памяти при   Найти похожие ветки 

 
Lev   (2003-09-12 13:10) [0]

Прошу помочь со следующей проблемой.
Я сделал простенький просмотрщик картинок (изображения формата JPEG). Изображения (масштабированные) помещаются в Grid (однострочный). При простой прокрутке грида происходит непонятная мне катастрофическая утечка физической памяти. Технология такая: в OnCreate формы картинки загружаются в Objects ячеек грида:

...
var
j :integer;
pct :tpicture;
...
with stringrid1 do
for j:=0 to colcount-1 do
begin
pct:=tpicture.create;
pct.loadfromfile(fname[j]); //fname[j] - массив с именами файлов
objects[j,0]:=tobject(pct);
end;
...

В процедуре для события OnDrawCell сетки картинки рисуются:

...
with sender as StringGrid do
if (acol>=0) and (arow>=0) then
begin
rect:=scaling(tpicture(objects[acol,0]),rect);
{scaling - функция для пропорционального масштабирования изображения по размерам ячейки сетки}
canvas.strechdraw(rect,tpicture(objects[acol,0].graphic)
end;
...

С чем может быть связано утекание памяти и как с ним бороться?


 
Verg ©   (2003-09-12 13:21) [1]

А откуда эта scaling ?


 
Hooch ©   (2003-09-12 13:28) [2]

а при закрытии фоормы ты object[i,j] освобождаеш ?


 
Hooch ©   (2003-09-12 13:29) [3]

либо в scaling косяк


 
Sapersky ©   (2003-09-12 14:50) [4]

Создавать лучше в OnShow, уничтожать в OnHide (а не OnCreate/OnDestroy). Если, конечно, это главная форма.


 
Lev   (2003-09-15 11:07) [5]

>Verg, Hooch
scaling - моя процедура, я уверен, что дело не в ней, т.к. я сам, заподозрив что-то с ней связанное, ее просто отключал (т.е. не масштабировал картинки при помещении в сетку), но никакой разницы не было - те же утечки памяти при прокрутке
>Hooch
Конечно, я освобождаю object[i,j] при закрытии, но ведь утечки не при закрытии, а при работе формы - при прокрутке
>Sapersky
Какая в данном случае разница?


 
ZEE ©   (2003-09-15 11:39) [6]

В чем проявляются эти "утечки памяти"?
Если в том что доступной физической памяти становится меньше - то это не утечка - просто надо ж куда-то девать картинки, которые ты открываешь в просмотре.
Конечно если идет доступной памяти все меньше, а кол-во загруженных объектов не увеличивается (точнее не должно было увеличиваться) - то вот тут что-то не так...

а конкретнее - после создания и использования картинок
pct:=tpicture.create;
...

надо все-таки Free делать,
или не создавать каждый раз новые, а юзать ранее созданные...


 
AlexT1000 ©   (2003-09-15 14:03) [7]

если у тебя D5 скачай updatePack . у меня вроде тоже такая хрень была. по идее должно помочь.


 
Sapersky ©   (2003-09-15 17:01) [8]

Какая в данном случае разница?

Кажется, никакой :) Я это посоветовал по старой памяти - были какие-то глюки в своё время. Я полагал, что событие OnCreate возникает до создания компонентов, лежащих на форме. Сейчас специально посмотрел - до Delphi3 включительно действительно так, начиная с Delphi4 OnCreate возникает после создания всех компонентов. Так что проблем из-за этого быть не должно.
Но я всё равно пишу инициализацию в OnShow :)



Страницы: 1 вся ветка

Текущий архив: 2004.01.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
1-49486
Vl_
2004-01-03 20:34
2004.01.16
МАТРИЦЫ


4-49809
Tracer
2003-11-12 12:29
2004.01.16
Как прочитать информацию с чужй формы (Заголовок формы известен)


14-49686
Alex_x
2003-12-26 12:33
2004.01.16
TurboPower


1-49609
The X
2004-01-05 09:36
2004.01.16
Глобальное использование задатчиков вроде DecimalSeparator


3-49436
Michail Dalakov
2003-12-18 15:42
2004.01.16
BDE и MSSQL