Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про память. [D6, XP]


Страницы:   1 2 3

vegarulez ©   (2008-01-06 09:45:00) 

Привет всем мастерам.
Подскажите пожалуйста ответ на такой вопрос...
у меня в программе я должен обновлять рисунок кнопочек и обновляю я его вот таким кодом:


var
i,z:Integer;
begin
randomize;
z:=random(rnd_btn);
Bmp := TBitmap.Create;
        for i:=0 to FormMain.ComponentCount-1 do
         if FormMain.Components[i] is TButton then
        with (FormMain.Components[i] as TButton) do
        if pos('BT_',FormMain.Components[i].Name)=0 then
         Begin
          Bmp.LoadFromFile('./picture/key'+inttostr(z)+'.bmp');
          Bitmap.FreeImage;
          Bitmap.FreePixmap;

          Bitmap.Width:=Width;
          Bitmap.Height:=Height;
          Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
        End;

Bmp.Free;
end;


Так  вот... перехожу собственно к вопросу... при таком подходе я заметил, что после каждого обновления рисунка кнопочек память выделяемая под программу увеличивается.
Я  добавил в код FreeImage, FreePixmap (выделлые жирным цветом :) ) ну типа думал очистить, чтоб память не занималась... но это не помогло...

Вопрос: Подскажите как сделать правильно? Чтобы после каждого обновления память не подъедалась. Хоть она увеличивается и не на много там килобайты... но тем не менее...


ЦУП   (2008-01-20 23:28:00) [21]


> vegarulez ©   (06.01.08 09:45) 


Добавь код:

Bmp.Dormant;
Bmp.FreeImage;
...
Bmp.Free;


homm   (2008-01-20 23:26:00) [22]

> [23] vegarulez ©   (20.01.08 23:20)
> 3. Какая разница какая там процедура - тупо создал пустую
> кнопку и на неё завел одну эту процедуру... её

Дак какая разница, или все же приведенная процедура? Еврей, блин.


vegarulez   (2008-01-20 23:20:00) [23]

1. Bitmap свойство кнопки аналогичное picture в VCL...
2. этого я так и не понял...
3. Какая разница какая там процедура - тупо создал пустую кнопку и на неё завел одну эту процедуру... её вызов...
Begin
BT_Picture();
End;

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


homm   (2008-01-20 23:08:00) [24]

> [21] vegarulez ©   (20.01.08 23:01)
> Ну какие именно подробности тебя интересуют? я же уже всё
> что требуется написал.

Ага?
Что такое bitmap — раз.
Ты не так тестировал (или не верно написал, но не написал опровержения) — два.
в [13] ты написал «тыкаю на кнопку которая эту процедуру юзает...», а я тебе сказал, что «утечка скорее всего не здесь.», т.е. не в этой процедуре. Код процедуры нажатия на кнопку ты не привел — три.

Нужно читать то, что умные люди говорят, и отвечать на вопросы, которые они задают. Отвечать не вопросом на вопрос. Ку?


vegarulez   (2008-01-20 23:01:00) [25]

homm ©   (20.01.08 22:51) [20]
Ну какие именно подробности тебя интересуют? я же уже всё что требуется написал. процедуру которая кушает уже привёл.


homm   (2008-01-20 22:51:00) [26]

> [19] DVM ©   (20.01.08 22:49)
> Ты б сразу сказл, что у тебя форма из QForms

не переживай, еще более нужные подробности мы узнам не раньше 60-го поста %)


DVM   (2008-01-20 22:49:00) [27]


> vegarulez ©   (20.01.08 22:43) [16]

Ты б сразу сказл, что у тебя форма из QForms


homm   (2008-01-20 22:49:00) [28]

> [16] vegarulez ©   (20.01.08 22:43)
> CLX о чём то говорит?

Еврей?


DVM   (2008-01-20 22:46:00) [29]


> CLX о чём то говорит?

Конечно. Правда не использовал и не использую.


vegarulez   (2008-01-20 22:43:00) [30]

DVM ©   (20.01.08 22:38) [15]

CLX о чём то говорит?


DVM   (2008-01-20 22:38:00) [31]


> vegarulez ©

Кстати, а что такое все же Bitmap там?


homm   (2008-01-20 22:36:00) [32]

> [13] vegarulez ©   (20.01.08 22:33)
> прогоняю много раз саму программу

Че, какую программу? Ты же утверждаешь, что в этом участке у тебя течет, этот участок и прогоняй.


vegarulez   (2008-01-20 22:33:00) [33]

homm ©   (20.01.08 22:29) [10] прогоняю много раз саму программу даже без отладчика гтовый экзек скомпилиный... тыкаю на кнопку которая эту процедуру юзает...


homm   (2008-01-20 22:32:00) [34]

> [11] vegarulez ©   (20.01.08 22:30)
> но почему тогда подъедается память

Пока только по тому, что так утверждаешь ты…


vegarulez   (2008-01-20 22:30:00) [35]

да я понимаю что ошибок нет... просто не понимаю... как делфи с графикой кнопок работает... каким образом он рисует холст... типа кранит в памяти прежний помещая повер него новый? или затирает его? но почему тогда подъедается память, если затирает его новым.... вот такие вопросики...

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


homm   (2008-01-20 22:29:00) [36]

> [7] vegarulez ©   (20.01.08 22:24)

Не так смотрят. Во первых нет такого столбца в дисптчере, ни «выделение памяти процессу», ни «выделенная памяти процессу». По крайней мере в русской ХР. Смотреть нужно на «объем виртуальной памяти». Причем смотреть явно не под олтлачиком, и прогоняя тестируемую процедуру несколько раз, т.к. после первого раза память моддет выделится под нужды системы по обслуживанию приложения, а не под само приложение.


DVM   (2008-01-20 22:27:00) [37]

А в приведенном коде ошибок нет.


DVM   (2008-01-20 22:27:00) [38]


> смотрю через диспетчер задач...

Диспетчер задач он не удобен для этих целей. Возьми либо FastMM4, а еще лучше MemProof и погляди что и ГДЕ у тебя текет.


vegarulez   (2008-01-20 22:24:00) [39]

млин ну я по шагам смотрю... по F8... когда переходит на эту процедуру - наней подъедается... смотрю через диспетчер задач... выделение памяти процессу


homm   (2008-01-20 22:20:00) [40]

> [4] vegarulez ©   (20.01.08 22:13)
> Прихватил... только, что это дало для понимания вопроса?

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо