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数据的任何缓存(除非也使用压缩). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |