-
Есть функция,которая по линку выкачивает файл и сохраняет его на диск. Выкачивает через Socks Proxy.
В итоге каждое выкачивание дает утечку памяти в 1 мегабайт.
Если качать напрямую или через http proxy утечки нет. Возможно я что-то не так делаю?
Вот код:
function LoadFile(Link:string):string;
var http:Tidhttp;
S:TFileStream;
FileName:String;
IdIOHandlerSocket: TIdIOHandlerSocket;
IdSocksInfo: TIdSocksInfo;
begin
http:=Tidhttp.Create(nil);
IdIOHandlerSocket:= TIdIOHandlerSocket.Create(nil);
IdSocksInfo:= TIdSocksInfo.Create(nil);
http.IOHandler:= IdIOHandlerSocket;
IdSocksInfo.IOHandler:=IdIOHandlerSocket;
IdSocksInfo.Host:='192.168.17.253';
IdSocksInfo.Port:=5512;
IdSocksInfo.Version:=svSocks5;
FileName:='D:\MyFile.dat';
S:=TFileStream.Create(FileName,fmCreate);
try
http.Get(Link,S);
Result:=FileName;
except
end;
S.Free;
http.Free;
IdIOHandlerSocket.Free;
IdSocksInfo.Free;
end; -
Cobalt © (12.06.12 15:15) [1]1) ReportmemoryLeakOnShutdown := True покажет тебе в чем утечка (если она есть)
2) Как ты определяешь эту утечку? -
brother © (12.06.12 15:43) [2]> except
> end;
> S.Free;
> http.Free;
при исключении не вызывается уничтожение объектов s и http, а исключения ты гасишь и не обрабатываешь:) -
>Cobalt © (12.06.12 15:15) [1]
1. А это где надо включить ?
2. В диспетчере задач смотрю
>brother © (12.06.12 15:43) [2]
Почему не вызывается? все что за except...end выполняется же.
В реальной задачи у меня пишется в исключение в лог. -
brother © (12.06.12 16:38) [4]> все что за except...end выполняется же.
нет будет выход из функции -
brother © (12.06.12 16:38) [4]
Я отладчиком проверял, заходит в любом случае. -
brother © (12.06.12 17:02) [6]не надо ляля... ;)
-
brother © (12.06.12 17:11) [7]зы. я шучу ;)
-
Cobalt © (12.06.12 18:47) [8]1) В dpr надо записать, после первого begin
или в OnCreate MainForm
Хотя, если у тебя Delphi7, то воспользуйся менеджером FastMM
2) Это не очень корректный инструмент. вот EOutOfMemory - это верный знак :)
А вообще, почитай специалиста:
http://www.gunsmoker.ru/2009/05/blog-post_24.html -
Cobalt © (12.06.12 18:47) [8]
ок, спасибо!