Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2009, 23:03   #1
PUH
Пользователь
 
Регистрация: 21.02.2008
Сообщений: 35
По умолчанию Indy в потоке - утечка памяти

Доброго времени суток!

Имею проблему с утечкой памяти.

Код потока:
Код:
procedure Test.Execute;
var
  http : Tidhttp;
  s : string;
  compressor : tIdCompressorZLib;
begin
  http := Tidhttp.Create; http.Request.AcceptEncoding := 'gzip, deflate';
  compressor := tIdCompressorZLib.Create; http.Compressor := compressor;

  s := http.get ('http://yandex.ru');

  http.Free; compressor.Free; exit;
end;
После остановки, по идее, он должен освободить занимаемую память. Но этого не происходит - уже через час бесперебойной работы программы она занимает 50-60 мб. оперативной памяти, против 2 мб. при запуске. Чем дольше работает - тем больше кушает.

D2010, indy 10.5.7 (одна из последних ревизий)

Помогите разобраться в проблеме, пожалуйста - программы должны сутками бесперебойно работать, а этого не выходит.

50$ за решение готов отдать, бедный студент
PUH вне форума Ответить с цитированием
Старый 25.12.2009, 23:28   #2
samec
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 15
По умолчанию

может http.Free; compressor.Free; просто не выполняются?
можт как нить так:
Код:
procedure Test.Execute;
var
http : Tidhttp;
s : string;
compressor : tIdCompressorZLib;
begin
Try
http := Tidhttp.Create; http.Request.AcceptEncoding := 'gzip, deflate';
compressor := tIdCompressorZLib.Create; http.Compressor := compressor;
s := http.get ('http://yandex.ru');
Finally
http.Free; compressor.Free; 
end;
exit;
end;
samec вне форума Ответить с цитированием
Старый 25.12.2009, 23:34   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в асю напиши, поговорим

пауэрлифтинг, вообще то Free сам по себе вызывает Destroy;
просто он проверяет существует ли обьект вообще или нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 26.12.2009 в 00:06.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2009, 23:49   #4
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

Может надо вызвать дестрой вместо фрее
пауэрлифтинг вне форума Ответить с цитированием
Старый 26.12.2009, 00:12   #5
PUH
Пользователь
 
Регистрация: 21.02.2008
Сообщений: 35
По умолчанию

Заметил - если к главной форме не обращаться из потока (например, form1.memo1.lines.add ('') - памяти кушает меньше на тот же промежуток времени.
PUH вне форума Ответить с цитированием
Старый 28.12.2009, 14:06   #6
freest
Пользователь
 
Регистрация: 26.09.2009
Сообщений: 10
По умолчанию

пусть программа вызывает себя новую и закрывает текущую , оставляя работать нову, сохраняя и считывая нужные данные с файла
ICQ: 308 895 241
программы под заказ
freest вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Indy в потоке - утечка памяти PUH Помощь студентам 0 25.12.2009 12:27
Утечка памяти при работе с GDI+ Ivan_32 Общие вопросы C/C++ 2 29.11.2009 00:12
Не могу понять, где утечка памяти (9 строчек) dueram Win Api 1 24.11.2009 19:56
утечка памяти в С++ vengo Общие вопросы C/C++ 9 10.06.2008 21:24
DrawState - утечка памяти? unnamed Win Api 2 11.04.2007 18:36