![]() |
Re: TCP Indy Client/Server Performanceproblem
Hmmm... Gehen wir es mal genau durch.
Client: Sendet Query, führt GetTickcount durch und wartet auf Ergebnis (Aufruf von ReadStream). Server: Wartet auf Anfrage. Bei Erhalt wird LoadData aufgerufen und das Ergebnis dann versendet. Die Clientzeit enthält also die Zeit von LoadData + Versand. Wenn du immer noch skeptisch bist: : Bau mal nach dem LoadData, aber vor dem Server-Gettickcount ein Sleep(10000) ein. Wetten, daß die Clientzeit um 10 Sekunden hochgeht? ;-) Nur weil du auf Clientseite nun Readstream aufgerufen hast, bedeutet das doch noch lange nicht, daß der Server bereits mit dem Versand der Daten beschäftigt ist. Cu, Udontknow |
Re: TCP Indy Client/Server Performanceproblem
Ah, jetzt weiß ich, was Du meinst ... :wall:
Ich prüf das morgen nochmal.... Ich meine, das LoadData sind ca. 250ms, dann wären 5.5MB in ca 1300 ms beim Client... Auch zu lahm, aber besser. Ich meld mich morgen |
Re: TCP Indy Client/Server Performanceproblem
So, nochmal geprüft. Die Nettoübertragung liegt bei 1300ms für 5.5MB, ergo 4.2MB/sec, und das ist immer noch zu wenig.
:gruebel: |
Re: TCP Indy Client/Server Performanceproblem
Hallo!
Was für eine Art Stream nutzt du? TMemoryStream? Postest du bitte mal die neuen Sende- und Empfangsroutinen? Bis dann, Andreas |
Re: TCP Indy Client/Server Performanceproblem
Hallo nochmal,
habe eine kleine Testanwendung geschrieben, um die Performance zu prüfen. Ist natürlich auch abhängig von der Hardware (Einstellung der Netzwerkkarten: 100 Mbit/s Vollduplex). Ergebnis: Client und Server lokal: 10 MB in 234 Ticks. (42 MB/s) Client auf anderer Maschine: 10 MB in 875 Ticks. (11 MB/s). Das ist nahe am Maximalwert (100 Mbit / 8 = 12.5 MByte). Hier mal der Code, ist allerdings die neuere Indy-Version und muss dementsprechend angepasst werden... Client:
Delphi-Quellcode:
Server:
procedure TForm67.Button1Click(Sender: TObject);
var Command:Integer; var Stream:TMemoryStream; var Size:Int64; var c:cardinal; begin Command:=0; TCPClient.Connect; TCPClient.IOHandler.Write(Command); Stream:=TMemoryStream.Create; try Size:=TCPClient.IOHandler.ReadInt64; Memo1.Lines.Add('Empfange '+IntToStr(Size)+' Bytes'); Stream.Size:=Size; c := GetTickCount; TCPClient.IOHandler.ReadStream(Stream,Size); Memo1.Lines.Add(IntToStr(GetTickCount - c) + ' tics'); finally Stream.Free; end; end;
Delphi-Quellcode:
Bis dann,
var Stream:TMemoryStream;
begin AContext.Connection.IOHandler.ReadInteger(); Stream:=TMemoryStream.Create; try Stream.Size:=1024*1024*10; AContext.Connection.IOHandler.Write(Stream.Size); AContext.Connection.IOHandler.Write(Stream,Stream.Size); AContext.Connection.Disconnect; finally Stream.Free; end; Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz