![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про память. [D6, XP]
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)
> Прихватил... только, что это дало для понимания вопроса?
То, что ты выполняешь этот код не по какому то действию, а уже совершив какие-то действия в обрабочтике события. Так что утечка скорее всего не здесь.