gpt4 book ai didi

delphi - TidHttp 文件下载引发内存不足异常

转载 作者:行者123 更新时间:2023-12-03 15:21:18 30 4
gpt4 key购买 nike

考虑以下使用 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 以某种方式在将文件写入流之前将其缓存在内存中。

最佳答案

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

Indy 尚不支持 HTTP 流式解压缩(但支持 FTP),因此 TIdHTTP将整个压缩数据缓存在内存中,然后再将其解压缩到文件。

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

关于delphi - TidHttp 文件下载引发内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607276/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com