Entwickler-Ecke

Netzwerk - Performance Einbußen im Netzwerk


haschme - Mo 01.06.15 16:56
Titel: Performance Einbußen im Netzwerk
Hallo zusammen,

in dem Betrieb für den ich arbeite wird noch auf Delphi Software gesetzt.
Da wir aber mitlerweile viel in C# machen, soll die alte Delphi Software nach und nach mit C#-Programmen abgelöst werden.

Dies ist auch bei diversen Programmen schon geschehen.
Die Logik und die Algorithmen haben dabei keine wirkliche Veränderung durchgemacht, lediglich die Sprache hat sich geändert.

Was vielen Kollegen bei der Verwendung der Software allerdings aufgefallen ist, ist das Problem, dass die in C# erzeugte Software über das Netzwerk sehr
viel langsamer läuft als die in Delphi programmierte Lösung.

Lokal ist die in C# programmierte Software allerdings immer mindestens genauso schnell wie die Delphi Software.

Zuerst dachte ich es liegt nur am langsamen Netz, aber dann müsste ja die Delphi Version die ebenfalls im Netz liegt auch diese Performanceeinbußen haben oder?

Hat jemand eine Idee oder Erfahrungen mit solchen Geschehnissen?


Liebe Grüße und vielen Dank!


Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Mo 01.06.2015 um 17:05


Ralf Jansen - Mo 01.06.15 17:02

Zitat:
Was vielen Kollegen bei der Verwendung der Software allerdings aufgefallen ist, ist das Problem, dass die in C# erzeugte Software über das Netzwerk sehr
viel langsamer läuft als die in Delphi programmierte Lösung.


Was meinst du mit über das Netzwerk? Aus einem Network Share gestartet und es geht um die Startzeit?
Wenn es um das starten geht vergleichst du gerade eine Delphi Single Executable mit einer Multi Assembly Anwendung?


haschme - Di 02.06.15 08:35

Hallo,

vielen Dank für die schnelle Antwort!

Ja mit über das Netzwerk meinte ich einen Network Share.
Die Startzeit der Programme ist dabei nicht das Problem.

Es geht viel mehr um Perfomanceeinbußen während der Laufzeit der Programme.

Also im Prinzip habe ich 2 Programme die das selbe machen.
Das eine in Delphi programmiert und das andere in C#.

Beide liegen auf dem Network Share und verarbeiten Daten die ebenfalls auf dem Network Share liegen.
Starte ich also zum Beispiel ein Sortierprogramm das sowohl in Delphi als auch in C# erstellt worden ist und stecke Datensätze hinein die sortiert werden sollen,
so ist das Delphi Programm immer deutlich schneller.

Starte ich das in C# programmierte Sortierprogramm aber mal lokal und sortiere dann, ist es deutlich schneller fertig als wenn ich es im Network Share starte.

Deine zweite Frage müsste ich leider mit einer Gegenfrage beantworten: "Was bedeutet Delphi Single Executable und Multi Assembly Anwendung?
Die Begriffe sind mir leider fremd."


Ralf Jansen - Di 02.06.15 10:14

Zitat:
Beide liegen auf dem Network Share und verarbeiten Daten die ebenfalls auf dem Network Share liegen.


Bei der lokalen Variante sind dann auch die Daten lokal? In dem Fall würde ich um das einzugrenzen mal durchprobieren ob es nur um den Lagerort der Daten geht. Also Programm lokal, Daten im Netz bzw. umgekehrt. Am Ende weißt du dann zumindest ob es am Lagerort der Applikation oder am Lagerort der Daten liegt.

Zitat:
Deine zweite Frage müsste ich leider mit einer Gegenfrage beantworten: "Was bedeutet Delphi Single Executable und Multi Assembly Anwendung?
Die Begriffe sind mir leider fremd."


Es war meine persönliche Begrifflichkeit die muß man nicht kennen ;) Meine Frage war ob du eine zu einer einzelnen Exe gelinkten Delphi Executable mit einer aus vielen Assemblies bestehenden .Net Applikation vergleichst. Ein kleinteiliges Nachladen von Assemblies aus dem Netz wäre von Nachteil gegenüber dem einmaligen Laden einer einzelnen Executable in den Speicher. Da es dir aber nicht um die Startzeit ging ist das nicht weiter von belang.


haschme - Di 02.06.15 12:25

Also beim testen war es so das ich nur den Datensatz verschoben habe.
Also sowohl die Delphi als auch die C# Version liegen beide auf dem Network Share.

Beim ersten Test lag die Eingabedatei ebenfalls auf dem Network Share.

Dabei war die Delphi Version locker 10mal so schnell fertig wie die C# Version.

Beim 2. Test habe ich die Eingabedatei zuvor auf meinen lokalen Rechnerpfad geschoben, die C# und die Delphi Version lagen aber weiterhin auf dem Netzwerkpfad.

Das Delphiprogramm war genauso schnell fertig wie beim 1. Test.
Die C# Version wurde allerdings jetzt auch sehr viel schneller.

Würde der Fehler an der Netzwerkgeschwindigkeit liegen müsste sich die Delphi Version ja eigentlich genauso verhalten wie die C# Version.

Bin deshalb etwas verwirrt


Ralf Jansen - Di 02.06.15 13:32

Es scheint ja dann am Datenzugriff zu liegen. Was heißt hier Datenzugriff genau? Ein simples öffnen eines FileStreams? Oder ist das irgendein Datenbank Subsystem das auf die Dateien zugreift? Ein spezieller Serializer?


haschme - Mo 08.06.15 12:58

Ja das erste. Ein simples öffnen eines Filestreams


Ralf Jansen - Mo 08.06.15 13:30

Hmh. Mir wäre nicht bewußt das es da irgendeine weitere Schicht (security o.ä.) in .Net gibt die da Zeit kosten könnte.
Möglicherweise liegt der Unterschied dann im Buffern. .Net benutzt Standardmäßig einen 4K Buffer was wenn du auf eine größere Datei sequentiell zugreifst unglücklich wäre. Wenn dem so ist dann vergrößer mal den Buffer. FileStream hat da ein paar Konstruktorüberladungen dennen man die Buffergröße mitgeben kann.