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

delphi – TidHttp文件下载trows内存不足异常,第1张

概述考虑使用Indy组件从Internet下载文件的以下代码: procedure TForm26.Button1Click(Sender: TObject);var vFileStream : TStream;begin DeleteFile('C:\test.exe'); vFileStream := TFileStream.Create('C:\test.exe', fmCrea 考虑使用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数据的任何缓存(除非也使用压缩).

总结

以上是内存溢出为你收集整理的delphi – TidHttp文件下载trows内存不足异常全部内容,希望文章能够帮你解决delphi – TidHttp文件下载trows内存不足异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1267477.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存