Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Чем больше работает, тем больше съедает памяти


Автор: DmitryHT 26.9.2007, 01:26
Всем, у кого сейчас ночь, доброй ночи, остальным - привет! 
При парсинге новых прокси с каждым запущеным потоком растет увеличение кол-ва памяти (из-за чего?), с которой работает программа.
Потоки запускаются с очисткой памяти по завершению потока potok.FreeOnTerminate(true); 



Почему так может быть?

ВОПРОС РЕШЕН!  smile 

Автор: aktuba 26.9.2007, 04:53
Цитата

п.с. память, выделенная локальным переменным в процедурах потоков, я так понимаю, высвобождается вместе с потоком?


Не факт...

Цитата

п.п.с. влияет ли как-то на это конструкция 
  AppendFile(file_p);
  Writeln(file_p,proxy);
  CloseFile(file_p) 


Теоретически, нет...

Автор: Felan 26.9.2007, 08:01
Цитата(DmitryHT @  26.9.2007,  03:26 Найти цитируемый пост)
п.с. память, выделенная локальным переменным в процедурах потоков, я так понимаю, высвобождается вместе с потоком?

Да, если это не ссылки на динамически созданные объекты.

Где-то ты не освобождаешь память... Внимательно проверь конструкторы и деструкторы. И посмотри блоки try..except. Если в таком блоке создается временный локальный объект - всегда нужно удалять его в finally.



Автор: DmitryHT 26.9.2007, 10:30
Цитата

И посмотри блоки try..except. Если в таком блоке создается временный локальный объект - всегда нужно удалять его в finally.


спасибо! Сейчас пересмотрю этот вариант.

Автор: DmitryHT 26.9.2007, 11:49
Up: для наглядности добавил выдержки из кода (см. первый пост)  smile 

Автор: VICTAR 26.9.2007, 14:09
DmitryHT, где главный код запускающий потоки? ты два раза привел одну и туже процедуру tPotok.ParseProxy....

Добавлено через 1 минуту и 32 секунды
а где regex.Free?

Автор: DmitryHT 26.9.2007, 14:18
Цитата

 где главный код запускающий потоки? ты два раза привел одну и туже процедуру


спасибо, не усмотрел.
Исправил первый пост.


Ок Regex.Free добавлю, 
но ведь память для regex итак должна высвобождаться вместе с завершением потока...

Автор: aktuba 26.9.2007, 15:05
Цитата

но ведь память для regex итак должна высвобождаться вместе с завершением потока... 


Память, выделяемая в нем, будет освобождена, но сам объект так и останется в памяти.
На будущее, возьми за привычку - все что создал, необходимо уничтожить. Кстати, есть сомнения по поводу использования Destroy...

Автор: bems 26.9.2007, 15:47
TRegExpr созданый в tPotok.ParseProxy где освобождается?

Добавлено через 1 минуту и 7 секунд
сори, не дочитал топик...

Автор: DmitryHT 26.9.2007, 18:20
Цитата(aktuba @  26.9.2007,  15:05 Найти цитируемый пост)
Кстати, есть сомнения по поводу использования Destroy


а какого рода тут подозрения? Мне все варианты интересны!
Спасиб.

Автор: aktuba 26.9.2007, 21:00
Цитата

а какого рода тут подозрения?


Тем, что если объекта нет, Destroy вызовет ошибку. Используй Free.

Автор: DmitryHT 27.9.2007, 10:44
Aktuba, большое спасибо за то, что отвечаешь "на все" мои вопросы! 
Спасибо также всем остальным кто принял участие.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)