【发布时间】:2021-06-13 17:57:08
【问题描述】:
我正在尝试使用 Delphi 10.4 中的标准 TIdHTTP 和 TIdSSLIOHandler 组件从 Web 服务器下载文件:
memorystream := TMemoryStream.Create;
http.request.useragent:='Mozilla/5.0 (Windows NT 5.1; rv:2.0b8) Gecko/20100101 Firefox/4.0b8';
http.HandleRedirects := True;
try
http.get('https://dl.nmkd.de/ai/clip/coco/coco.ckpt',memorystream);
except
on E:Exception do memo.lines.add(E.Message);
memo.lines.add(http.responsetext);
end;
application.ProcessMessages;
memorystream.SaveToFile('coco.ckpt');
memorystream.free;
我在备忘录中得到的回复是:
Out of memory while expanding memory stream
HTTP/1.1 200 OK
文件大小约为 9 GB。
如何让 MemoryStream 能够处理该大小?我在 PC 中安装了足够多的物理 RAM。
【问题讨论】:
-
实际查看抛出的异常怎么样?对于 9 GiB,可能是“内存不足”...
-
是的,这确实有帮助。扩展内存流时内存不足。我会更新问题。
-
您可能安装了足够的 RAM,但这并不意味着您的应用可以使用所有这些。文件大小为 9GB。这意味着
TMemoryStream必须分配至少 9GB 的连续 内存——即使假设Web 服务器预先提供文件大小,否则TMemoryStream将在下载过程中动态增长时必须分配更多内存。你是编译32位还是64位? 32 位应用程序永远无法分配这么多内存。