|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
|||
|
|||
Ну, вообще, желательно показывать полный текст. На самом деле не вижу уничтожение объекта Fmp, либо Вы его действительно "забыли" уничтожить, либо просто уничтожение в отсутствующей части кода.
Вообще, такие утечти лучше всего искать прогами типа MemProog (страренькая прожка, но найти можно). |
#3
|
|||
|
|||
Уничтожение FPm у меня есть. Рабочий код весь приведен в листинге.
Код:
if FMP<>nil then begin FMP.Free; FMP:=nil; end; |
#4
|
||||
|
||||
Цитата:
Код:
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
|
|||
|
|||
Внес изменения, нет никаких улучшений. Память как выделялась, так и выделяется.
|
#6
|
|||
|
|||
Брось код проекта (можно в личку), попробую "поймать" утечку.
З.Ы. распространять код не буду |