Indy コンポーネントを使用してインターネットからファイルをダウンロードする次のコードを検討してください。
procedure TForm26.Button1Click(Sender: TObject);
var
vFileStream : TStream;
begin
DeleteFile('C:\test.exe');
vFileStream := TFileStream.Create('C:\test.exe', fmCreate);
IdHTTP1.Get('SomeUrl', vFileStream);
vFileStream.Free;
end;
メモリ不足の例外が発生しています。何が起こっているかというと、私が を使用しているという事実に加えて、TFileStream
それに書き込まれているバイトは直接ディスクに送られず、代わりに がget
終了するまでメモリに残ります。
ダウンロードしようとしているファイルは、非常に大きいです。
メモリ不足の例外を発生させずに大きなファイルをダウンロードする方法を知っている人はいますか?
Delphi 2010 および Indy の SVN からの最新の Indy 10。
編集
それはFileStream
問題ではありません。Indy
問題です。Indy は、どういうわけか、ストリームに書き込む前にファイルをメモリにキャッシュしています。