Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-49469
Sirruf
2003-12-16 19:40
2004.01.16
Параметры IBStoredProc


6-49656
Timerman
2003-11-10 23:10
2004.01.16
Как синхронизировать время с локалкой?


3-49419
koks
2003-12-22 10:02
2004.01.16
Type mismatch in expression........ :((


11-49472
=Sniper=
2003-05-03 21:13
2004.01.16
Label и вообще компоненты!


14-49768
ИМХО
2003-12-24 20:41
2004.01.16
Top 20 стран-халявщиков ПО





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский