Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datentransfer über Netzwerk (schnell) (XE2 - INDY) (https://www.delphipraxis.net/173686-datentransfer-ueber-netzwerk-schnell-xe2-indy.html)

harry113 11. Mär 2013 09:32

Datentransfer über Netzwerk (schnell) (XE2 - INDY)
 
Datentransfer über Netzwerk (schnell)

Aufgabenstellung:

Pc sendet über Netzwerk (TCP/IP) eine Datei (auf eigene Hardware)

Erledigt wird das über Delphi XE2 und den mitgelieferten Indy Komponenten
(IdTCPClient.IOHandler.Write(aStream, 0, false)

Funktioniert soweit auch, aber es muss noch die Geschwindigkeit erhöht werden (PC-seitig). Derzeitig erreiche ich ca. 56MB/s mit einem Quadcore i5-Gigabit Netzwerkkarte.


Welche Möglichkeiten habe ich die Performance zu erhöhen?
(Einstellungen / andere Komponenten etc...)

Was ist erfahrungsgemäß ca. die max. mögliche Datendurchsatzrate bei Gigabit Netzwerk und Indy?

Irgendwelche weiteren Tips/Einstellungen?

TIA,

harry

Sir Rufo 11. Mär 2013 09:44

AW: Datentransfer über Netzwerk (schnell) (XE2 - INDY)
 
Wie schnell kannst du denn die Datei beim Client von der Platte lesen?
Wie schnell kannst du denn die Datei beim Server auf die Platte schreiben?

Schreibe ein kleines Testprogramm, was einen (Memory)Stream (auf beiden Seiten!) mit unterschiedlichen Größen vom Client zu Server schickt und messe die Zeit. Damit kannst du den max. Durchsatz ermitteln.

Der langsamste Part (Client lesen von Platte, Übertragung der Daten, Server schreiben auf Platte) bestimmt den max. Durchsatz für dein Programm.

Klingt zwar komisch, ist aber so

harry113 11. Mär 2013 10:00

AW: Datentransfer über Netzwerk (schnell) (XE2 - INDY)
 
Hi,

>Wie schnell kannst du denn die Datei beim Client von der Platte lesen?
ca. 400 MB/s (Solid State)

>Wie schnell kannst du denn die Datei beim Server auf die Platte schreiben?
ist eigene Hardware, Daten werden dort entgegengenommen und direkt ins Ram geschrieben -> ca. 85MB/s (aufgrund Hardware-Limitationen)

Testprogramm derzeitig liefert ca. 56 MB/s und da sollte noch etwas "Luft" nach oben sein... Der Hardware-Entwickler meint das der PC "relativ" lange braucht um die Ack's der Datenpakete auszuwerten. Derzeit werden 6 Datenpakete a 1460 Bytes geschickt, danach die Ack's und danach die nächsten 6 Datenpakete. Mehr Datenpakete oder grössere Datenpakete schicken geht nicht (begrenzter Eingangspuffer auf Hardware).

Kann ich Pc-seitig noch was unternehmen um den Datendurchsatz zu erhöhen?

TIA,

harry

mjustin 11. Mär 2013 11:06

AW: Datentransfer über Netzwerk (schnell) (XE2 - INDY)
 
Zitat:

Zitat von harry113 (Beitrag 1206814)
Welche Möglichkeiten habe ich die Performance zu erhöhen?
(Einstellungen / andere Komponenten etc...)

Die Ararat Synapse Komponenten (Open Source) sind teilweise etwas "schlanker" als Indy implementiert. In meinen Performancetests lagen sie meist um einge Prozent über den Indy Komponenten - vielleicht sind sie auch in diesem Anwendungsfall geeignet. Von der Ansteuerung her sind sie Indy ähnlich (synchrone / blockierende Sockets).

Der schöne Günther 11. Mär 2013 11:47

AW: Datentransfer über Netzwerk (schnell) (XE2 - INDY)
 
Wenn es wirklich um pure Geschwindigkeit geht, warum nicht gleich direkt über native WinSocket-Aufrufe? Schneller als das kann es mit Sicherheit nicht werden, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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