2012-09-10 4 views
3

최근 델파이에서 DataSnap을 사용하여 RESTful 웹 서비스를 만들었습니다. 마르코 칸투 (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

죄송합니다. 둘 다 같은 컴퓨터에 있습니다. localhost에 연결 중입니다. – Adrian

+2

구현 버그와 유사합니다 : 타임 아웃에 도달 할 때까지 기다린 다음 반환 된 내용을 자릅니다. Content-Length HTTP 헤더를 처리해야합니다. –

답변

1

는 서버 측에서 TDSHTTPWebDispatcher 구성 요소에 BufferKBSize 속성을 조정 해보십시오. 동일한 속성은 클라이언트의 TsqlConnection 구성 요소에서 찾을 수 있습니다.

관련 문제