
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内存不足异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)