2012-09-10 47 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組件上可以找到相同的屬性。

相關問題