Форум: "Основная";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизКак ликвидировать выделенную память под компонент. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c