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

Вниз

Delphi таймер некорректен? (D6, win2000)   Найти похожие ветки 

 
Sandman25 ©   (2003-05-22 18:44) [0]

Сделал простейший проект с таймером на форме.
Вот обработчик.

var
i: byte;
begin
Timer1.Enabled := false;
try
for i:=1 to 100 do
Caption := IntToStr(random(100));
finally
Timer1.Enabled := True;
end;
end;


За полторы минуты работы память, используемая процессом (показанная диспетчером задач), выросла с 1620kb до 1636kb. Еще через 5 минут размер вырос до 1648kb.
Почему? Дело в random? В IntToStr и выделяемой под строку памяти?


 
Sandman25 ©   (2003-05-22 18:48) [1]

Заменил тело for - вместо присвоения Caption написал
for i :=1 to 100 do
Tag := i;
Все равно та же дурка - память растет...


 
VMcL ©   (2003-05-22 18:48) [2]

>Sandman25 © (22.05.03 18:44)

Забей на то, что пишет Task Manager. IMHO, это нормально.


 
DVM ©   (2003-05-22 18:49) [3]

Могу только предположить, что это память, выделяемая динамически под под string.


 
DVM ©   (2003-05-22 18:50) [4]


> IMHO, это нормально.

Если память с течением времени продолжает расходоваться - это ненормально. Через год работы проги - она кончится. Год много - вовсе нет для сервера.


 
VMcL ©   (2003-05-22 18:53) [5]

>DVM © (22.05.03 18:50)

>>Если память с течением времени продолжает расходоваться - это ненормально.

Согласен. Но, думаю, в этом случае это не так (напр., память расходуется и освобождается равномерно). Надо проверять.



 
Sandman25 ©   (2003-05-22 18:59) [6]

Что проверять? :(
Я же использую стандартный таймер. Неужели писать свой таймер?


 
panov ©   (2003-05-22 19:25) [7]

>Sandman25 © (22.05.03 18:59)

Не беспокойся в этом случае.
Это свойство менеджера памяти в Windows.

Память освободится.


 
Юрий Зотов ©   (2003-05-22 19:50) [8]

Думаю, это все же не баг, а фича Memory Manager (что-то типа - он не спешит сразу возвращать системе мелкие куски памяти, держит их за собой и ждет, пока накопится достаточно большой кусок, чтобы сократить количество перезапросов). Поэтому, если уж писать, то не свой таймер, а свой MM. Да и Task Manager мало подходит для таких измерений. Вот пример (только что сделал):

1. Вызываем Task Manager и видим, что Delphi жрет 27040 Кб.
2. Сворачиваем Delphi - 1864 Кб.
3. Снова разворачиваем - 5324 Кб.

Выводы напрашиваются...

Для отлова утечек памяти есть специализированные инструменты, ими и надо пользоваться.


 
Sandman25 ©   (2003-05-23 10:11) [9]

Спасибо.
Попробую найти эти инструменты.


 
Shc ©   (2003-05-23 21:04) [10]

Попробуй описать i глобальной переменой.


 
Shc ©   (2003-05-23 21:05) [11]

Попробуй описать i глобальной переменой, и посмотреть на результат в этом случае.



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
1-13292
Aleksei85
2003-05-24 16:08
2003.06.05
Алгоритм перевода русс. текста в транслит


8-13337
Sergeys
2003-02-20 19:42
2003.06.05
Как обновить (перезапустить Image в RunTime)


14-13426
Ann
2003-05-19 13:34
2003.06.05
Коды


1-13295
Goblinus
2003-05-24 18:00
2003.06.05
Как создать кнопку в панели задач для неглавного окна приложения?


1-13122
softmaster
2003-05-25 18:05
2003.06.05
FastReport