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

Вниз

Как ликвидировать выделенную память под компонент.   Найти похожие ветки 

 
Grol ©   (2005-10-31 23:02) [0]

Не знаю....понятен ли Вам вопрос, но суть следующая: кидаю на форму MEMO1, LISTBOX1, STRINGGRID1 и Button1. В процедуре Button1 пишу следующее:


procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
begin
Memo1.Clear;
ListBox1.Clear;
for i:=0 to StringGrid1.ColCount-1 do
 for j:=0 to StringGrid1.RowCount-1 do
     StringGrid1.Cells[i,j]:="";
StringGrid1.ColCount:=1;
StringGrid1.RowCount:=1;
end;


Компилирую. Залезаю в диспетчер задач-->смотрю сколько прога занимает в памяти 4МБайт. Потом заполняю MEMO1, LISTBOX1, STRINGGRID1 какими-нибудь данными. Ну и вот заполнил, данными...смотрю через диспетчер задач сколько теперь весит программа в памяти, ага...например 30 МБайт.
Жму на Button1 и снова смотрю в диспетчер задач по прежнему 30МБайт. Так вот вопрос такой, как память, которая была выделенна под определенный компонент, прсто убить...:))
Спасибо заранее за ответы.


 
Eraser ©   (2005-10-31 23:09) [1]


> Grol ©   (31.10.05 23:02)

Попробуй после нажатия Button1, запустить Doom3 потом закрыть его, и глянь сколько будет занимать прога ;-)

Способы принудительно уменьшить размер есть, но лучше когда это делает система.


 
Zeqfreed ©   (2005-10-31 23:15) [2]

Eraser ©   (31.10.05 23:09) [1]
А если у него 1Гб оперативки и отключен своп? :)


 
Eraser ©   (2005-10-31 23:33) [3]


> Zeqfreed ©   (31.10.05 23:15) [2]

А смысл тогда срезать working size? Это только замедлит последующую работу программы, если прийдётся снова заполнять данными эти MEMO1, LISTBOX1, STRINGGRID1.


 
sniknik ©   (2005-10-31 23:42) [4]

> А если у него 1Гб оперативки и отключен своп? :)
тогда пусть в дополнение к думу запустит 1С восьмерку... вот что память жрет, ни одной игрухе и не снилось. ;)

Grol ©   (31.10.05 23:02)
операции с памятью довольно длительны, поэтому и не делаются без необходимости. тем более если ты раз затребовал 30мг, то где гарантия что снова не затребуеш? сразу после освобождения, как раз в тот момент когда система ранее затребованную заберет. и будет она память только туда сюда гонять, выдавать, отбирать, выдавать, отбирать ...  вся только твою прогу обслуживать.

for i:=0 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
    StringGrid1.Cells[i,j]:="";
вот это лишнее, пожалуй.

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

зато можеш "заставить" другим способом, например нажав на кнопку "свернуть" в правом верхнем углу рядом с крестиком... в принципе тоже самое делается вызовом одной API функции (SetProcessWorkingSetSize) только делать этого не надо...


 
Amoeba ©   (2005-11-01 10:45) [5]


> смотрю через диспетчер задач сколько теперь весит программа
> в памяти, ага...например 30 МБайт.
> Жму на Button1 и снова смотрю в диспетчер задач по прежнему
> 30МБайт. Так вот вопрос такой, как память, которая была
> выделенна под определенный компонент, прсто убить...:))

Незачем смотреть в диспетчер задач. Утечки памяти он не покажет, только с толку собьет. А причину тебе уже объяснили.



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

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

Наверх




Память: 0.48 MB
Время: 0.08 c
3-1129630838
vinni2000
2005-10-18 14:20
2005.11.27
Работа с временной или виртуальной таблицей?


14-1131004749
cmd help
2005-11-03 10:59
2005.11.27
Как слить несколько файлов в один?


2-1131284903
Mouse_Rat
2005-11-06 16:48
2005.11.27
Как узнать путь к файлу?


10-1107973454
Vcoder
2005-02-09 21:24
2005.11.27
Изменение объекта Equation


14-1130865514
YurikGL
2005-11-01 20:18
2005.11.27
USB - варежки