Здравствуйте. Пишу программу для загрузки на файлообменники с использованием 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гб разом, то будет выделено много памяти в процессе загрузки