2012-09-10 50 views
3

我最近开始在Delphi中使用DataSnap来产生什么是RESTful Web服务。在他自己Marco Cantu和其他几个人在互联网上的指导下,我成功地获得了整个“连锁”的工作。Delphi(DataSnap)Slow

但有一个小问题的速度;客户端现在可以向服务器发送一个流(连同它的大小)(由于这里的错误DataSnap XE2 and TStream method parameters被读取到发送的大小),服务器会将它重组为一个文件并将其保存在磁盘上。

但是,如果是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; 

任何帮助表示赞赏!

干杯, 阿德里安

+0

“*是否应该这样?*”不,但可能是网络问题。如果您只是将大小的文件复制到服务器会发生什么情况?如果你ping/tracert服务器,你会看到什么? – GolezTrol

+0

对不起,它们都在同一台计算机上;即连接到本地主机 – Adrian

+2

听起来像是一个实现错误:等待达到超时然后截断返回的内容。它应该处理Content-Length HTTP标头。 –

回答

1

在服务器端,尽量在TDSHTTPWebDispatcher组件调节BufferKBSize财产。在客户端的TsqlConnection组件上可以找到相同的属性。

相关问题