Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.11.2011, 19:56
Barlo Barlo вне форума
Прохожий
 
Регистрация: 24.11.2011
Сообщения: 3
Репутация: 10
По умолчанию IdHTTP в потоке выделяет много памяти

Здравствуйте. Пишу программу для загрузки на файлообменники с использованием idHTTP. Создал класс поток в котором происходит загрузка файла на сервер. В каждом отдельном потоке отдельный объект IDhttp.
Работа самого класса не вызывает сложностей.

Вопрос следующий: когда я загружаю файл на сервер методом Post, все идет нормально, но после удаления idhttp и завершения потока данные в памяти остаются.

Вот основной код Execute:

Код:
FIdHTTP:=TIdHTTP.Create(nil);
FIdHTTP.Request.UserAgent:='Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.6.30 Version/10.61';
FIdHTTP.Request.AcceptLanguage:='ru-RU,ru;q=0.9,en;q=0.8';
FIdHTTP.Request.CacheControl:='no-cache';
FIdHTTP.Request.ContentType:='';

FIdHTTP.HandleRedirects:=true;
FOldURL:='';
FIdHTTP.RecvBufferSize:=32*1024;
FIdHTTP.SendBufferSize:=32*1024;
FIdHTTP.OnWork:=IdHTTP_Work;
FIdHTTP.OnStatus:=IdHTTP1Status;
FIdHTTP.OnRedirect:=IdHTTP1Redirect;

depositfiles;

if FMP<>nil then begin 
    FMP.Free; 
    FMP:=nil; 
    end;

if FIdHTTP<>nil then begin
    FIdHTTP.Disconnect;
    FIdHTTP.Free;
    FIdHTTP:=nil;
    end;

while not (Terminated) do begin
    end;

//---------------------------



procedure depositfiles();
var
  s,b: String;
  newFileName, Path : string;
  i : integer;
begin

Get('http://depositfiles.com/');
// -- авторизация
// ....
//-----
s="данные веб-формы для загрузки";

Fmp := TidMultiPartFormDataStream.Create;
Fmp.AddFormField('MAX_FILE_SIZE', '2097152000');
Fmp.AddFormField('UPLOAD_IDENTIFIER', GetSubStr(s, 'name="UPLOAD_IDENTIFIER" value="', '"'));
Fmp.AddFormField('go', '1');
Fmp.AddFormField('agree', '1');
Fmp.AddFile('files', FFileName, 'multipart/form-data');

b := Post(GetSubStr(s, 'multipart/form-data" action="', '"'), Fmp);

// дальше обрабатываю результат
end;

В результате после загрузки на сайт около 100 Мб, в памяти программы висит ~30 Мб сверх нормы. Кроме того волнует вопрос: как сделать чтобы idhttp потреблял меньше памяти в процессе загрузки. Если я захочу загрузить 1гб разом, то будет выделено много памяти в процессе загрузки

Последний раз редактировалось Barlo, 24.11.2011 в 19:59.
Ответить с цитированием
  #2  
Старый 25.11.2011, 10:29
Mifody Mifody вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

Ну, вообще, желательно показывать полный текст. На самом деле не вижу уничтожение объекта Fmp, либо Вы его действительно "забыли" уничтожить, либо просто уничтожение в отсутствующей части кода.
Вообще, такие утечти лучше всего искать прогами типа MemProog (страренькая прожка, но найти можно).
Ответить с цитированием
  #3  
Старый 25.11.2011, 13:42
Barlo Barlo вне форума
Прохожий
 
Регистрация: 24.11.2011
Сообщения: 3
Репутация: 10
По умолчанию

Уничтожение FPm у меня есть. Рабочий код весь приведен в листинге.

Код:
if FMP<>nil then begin 
    FMP.Free; 
    FMP:=nil; 
    end;
Ответить с цитированием
  #4  
Старый 25.11.2011, 19:08
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Цитата:
Сообщение от Barlo
Уничтожение FPm у меня есть. Рабочий код весь приведен в листинге.

Код:
if FMP<>nil then begin 
    FMP.Free; 
    FMP:=nil; 
    end;

Код:
 if Assigned(FMP) then
    FreeAndNil(FMP);

Мб лучше?
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием
  #5  
Старый 25.11.2011, 20:09
Barlo Barlo вне форума
Прохожий
 
Регистрация: 24.11.2011
Сообщения: 3
Репутация: 10
По умолчанию

Внес изменения, нет никаких улучшений. Память как выделялась, так и выделяется.
Ответить с цитированием
  #6  
Старый 28.11.2011, 09:29
Mifody Mifody вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 25
Репутация: 10
По умолчанию

Брось код проекта (можно в личку), попробую "поймать" утечку.
З.Ы. распространять код не буду
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter