Zitat von
Bernhard Geyer:
Ich hatte mir auch mal 4-5 Vergleiche zusammen gestellt und da war C# um ca. 60-%80% schneller. Und ich wollte eigentlich das Gegenteil beweisen.
Das Problem dabei ist immer die versteckte Compiler Magic und auch die zu Grunde liegende Architektur der Datentypen. Eine String-Zuweisung in .NET ist schneller als eine in Delphi, da Strings in .NET nicht Referenz gezählt sind und somit nicht threadsicher gemacht werden müssen. Ein Verändern von Strings ist in .NET aber sehr zeit spielig, da Strings nur einmal im Speicher existieren und somit ein neuer String angelegt werden muss (dafür gibt es ja die StringBuilder Klasse um diesen Nachteil auszubügeln).
Was aber auch noch zum Tragen kommt sind die vielen Bereichsüberschreitungs-Checks, die in Delphi standardmäßig abgeschaltet sind. So ist ein
Code:
string S = "Hallo";
for (int i = 0; i < S.Length; i++)
ch = S[i];
in C# langsamer als der entsprechende Delphi.Win32 Code, da der entsprechende Indexer den angegeben Index i bei jedem Schleifendurchlauf prüft. (Übrigens die foreach Schleife meide ich mittlerweile des öfteren in C#, da bei Millionen Aufrufen einer Methode mit einer solchen Schleife, die Enumerator-Verwaltung ganz schön zu Buche schlägt.)
Bei vorgefertigten Algorithmen ist .NET wieder klar im Vorteil, weil Delphi da einfach zu wenig bietet, außer man holt sich ein 3rdParty Produkt, dass dann aber meist nur die Funktionalität ohne entsprechende Optimierung aufweist.
Das Fazit ist, dass man in jeder Sprache Code fabrizieren kann der langsamer ist als in einer anderen Sprache. Das fängt eben schon bei den Framework- und Platformgegebenheiten an und hört bei sprachlichen Elementen noch lange nicht auf.