【问题标题】:Delphi XE2 DataSnap REST - "Out of memory" when i try to download a big fileDelphi XE2 DataSnap REST - 当我尝试下载大文件时出现“内存不足”
【发布时间】:2012-05-04 14:25:44
【问题描述】:

我在 Delphi XE2 中创建了一个简单的 DataSnap REST 服务器,并且我有一个方法可以返回一个 TStream 对象来传输文件。这很好用,但是当我尝试下载一个大文件(~2,5GB)时,我得到了一个

“内存不足”

服务器端的错误消息。

我想通过互联网浏览器下载文件 (http://localhost:8080/datasnap/rest/TServerMethods1/GetFile)。

rest服务可以返回大文件吗?

我阅读了此question 并尝试了该解决方案,当我使用小文件时效果很好。

这是我的简单代码:

function TServerMethods1.GetFile: TStream;
var
  FileStream: TFileStream;
begin
  FileStream := TFileStream.Create('d:\file.exe', fmOpenRead);
  Result := FileStream;
end;

如何通过 Internet 浏览器从 REST 服务器下载大文件?

【问题讨论】:

  • 也许您可以让 Indy 以块的形式提供内容。
  • 所有体面的 HTTP 服务器实现都传输响应流,而无需先将其完全加载到内存中(AFAIK Indy 做得对,因此不需要分块)。看起来 DataSnap REST 服务的实现很差。

标签: delphi rest delphi-xe2 datasnap


【解决方案1】:

你的函数的结果是TStream,尝试为你的应用增加内存量How can I enable my 32-bit Delphi application to use 4gb of memory on 64-bit windows (via Wow64.exe)?

无论如何,您正在加载大量数据。您应该创建一个函数,以更小块的形式为您提供结果。

【讨论】:

  • 我创建了一个函数,它以更小的块给出结果,但在这种情况下(我认为)我只需要使用客户端应用程序(而不是互联网浏览器)。
  • 我将我的应用程序编译成 64 位平台,现在它可以工作了。谢谢你的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多