Delphi(DataSnap)慢

Delphi(DataSnap)慢,delphi,datasnap,Delphi,Datasnap,我最近开始在Delphi中使用DataSnap来生成RESTful web服务。在遵循了这个人自己马可·坎图(Marco Cantu)和其他几个人在互联网上的指导之后,我成功地让整个“链条”运转起来 但有一个小问题是速度;客户机现在可以向服务器发送一个流(以及它的大小)(由于这里的错误,它被读取到发送的大小),服务器将把它重新组装成一个文件并保存在磁盘上 但是对于一个3.66MiB文件,这需要50秒 应该是这样吗?在服务器上,我有: try F := TFileStream.Create(

我最近开始在Delphi中使用DataSnap来生成RESTful web服务。在遵循了这个人自己马可·坎图(Marco Cantu)和其他几个人在互联网上的指导之后,我成功地让整个“链条”运转起来

但有一个小问题是速度;客户机现在可以向服务器发送一个流(以及它的大小)(由于这里的错误,它被读取到发送的大小),服务器将把它重新组装成一个文件并保存在磁盘上

但是对于一个3.66MiB文件,这需要50秒

应该是这样吗?在服务器上,我有:

try
   F := TFileStream.Create('written.dat', fmCreate);
   F.Position := 0;
   F.CopyFrom(Data, DataSize);
finally 
   F.Free; 
在客户端:

var
  Server: TServerMethods1Client;
  DBStream: TFileStream;
begin
  Server := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
  try
    DBStream := TFileStream.Create('DataSnapServer.exe', fmOpenRead);
    DBStream.Position := 0;
    Showmessage(IntToStr(Server.SendData(DBStream, DBStream.Size)));
  finally
    Server.Free;
感谢您的帮助

干杯,
Adrian

在服务器端,尝试调整
TDSHTTPWebDispatcher
组件上的
BufferKBSize
属性。在客户端的
TsqlConnection
组件上可以找到相同的属性。

“是否应该是这种情况?”否,但可能是网络问题。如果只是将一个大小相同的文件复制到服务器上,会发生什么?如果ping/tracert服务器,您会看到什么?听起来像是一个实现错误:等待超时,然后截断返回的内容。它应该处理内容长度的HTTP头。这不是答案,但要说它是可行的:我们的mORMot RESTFul框架只通过
接口
定义的服务进行处理(无需通过所有DataSnap管道和向导,而且速度非常快)-它甚至可以在userland内存中没有内存副本的情况下使用。由于您正在编写一个.exe文件,可能是病毒扫描程序在写入该文件时正在对其进行快速扫描?我认为TFileStream会自动缓冲每4Kb的读写操作,这可能会在写入文件时导致大量的重新扫描;禁用此功能确实解决了问题,尽管我之前曾尝试过病毒扫描程序-很好的建议!我猜OnTrace是线程化的,并自动执行一个关键部分以使其线程安全?