Главная страница
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.018 c
1-13262
AndrewK
2003-05-23 17:14
2003.06.05
Как перенести фалы по маске из одной директории в другую?


1-13318
HardClubber
2003-05-25 10:43
2003.06.05
Параметры к приложению


8-13332
Adil
2003-02-23 10:23
2003.06.05
Autorun programmi


1-13130
demonyator
2003-05-25 01:52
2003.06.05
Длина строки символов в пикселях...


1-13141
Little Horror
2003-05-25 20:31
2003.06.05
Не основные формы на панели задач