加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – TidHttp文件下载trows内存不足异常

发布时间:2020-12-15 09:36:21 所属栏目:大数据 来源:网络整理
导读:考虑使用Indy组件从Internet下载文件的以下代码: procedure TForm26.Button1Click(Sender: TObject);var vFileStream : TStream;begin DeleteFile('C:test.exe'); vFileStream := TFileStream.Create('C:test.exe',fmCreate); IdHTTP1.Get('SomeUrl',vFil
考虑使用Indy组件从Internet下载文件的以下代码:

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;

我得到一个Out of memory异常.发生的事情是,除了我正在使用TFileStream之外,正在写入它的字节不会直接进入磁盘,相反,它们将保留在内存中直到终止.

我试图下载的文件非常非常大.

有没有人知道如何下载一个大文件而不会出现内存不足的异常?

Delphi 2010和来自Indy SVN的最新Indy 10.

编辑

这不是FileStream问题.这是印第安人的问题.不知何故,Indy在写入流之前将文件缓存在内存中.

解决方法

如果数据被压缩,或者数据是HTML且TIdHTTP.HTTPOptions属性不包含hoNoParseMetaHTTPEquiv标志,TIdHTTP会将整个文件下载到内存中.

Indy还不支持HTTP的流式解压缩(虽然它适用于FTP),因此TIdHTTP会将整个压缩数据缓存到内存中,然后再将其解压缩到文件中.

在HTML通过HTML< meta>覆盖新值的HTTP标头值的情况下,有时需要解析HTML.标签,最重要的是数据的Charset值,因此当数据作为String返回给用户的代码时,TIdHTTP可以使用正确的字符集解码数据.启用hoNoParseMetaHTTPEquiv标志会禁用该解析,从而禁用HTML数据的任何缓存(除非也使用压缩).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读