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:
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;
Server:
Delphi-Quellcode:
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;
Bis dann,
Andreas