BASTA! Tag 3: Speed Freak C# and .NET!
Christian Gross legte eine wirklich beeindruckende Session hin. Als erste zeigte er eine Bloomberg Anwendung die Real Time Daten live visualisierte. Desweiteren Empfahl er vor jeder weiteren Demo erst einmal dotTrace von JetBrains als Profiler um Performanceproblemen auf den Grund zu kommen. Gut das waren die ersten fünf Minuten der Session :-)
Ab jetzt zeigte er eine Reihe von beeindruckenden Demos. Angefangen mit dem Hinweis, dass Properties mit Gettern und Settern um einiges langsamer sind als öffentliche Felder.
In einer weiteren Demo mit mehreren tausend Schleifendurchläufen zeigte er dass die Verwendung von Klassen als Datenobjekte um einiges langsamer sind als Structs. Schneller als Structs allerdings sind mehrdimensionale Arrays. Aus Gründen der Lesbarkeit empfiehlt Cristian allerdings Structs zu verwenden.
Weiter ging es mit dem Umwandeln von Objekten von einem Typ in den anderen. Das Ergebnis: Casts kosten, eine Prüfung vor einem Cast kostet noch mehr. Zu casten und dabei Fehler mit einem Try-Catch-Block abzufangen kostet um einiges mehr. Die Lösung: “Know your types!!!”, also Casts vermeiden und typisiert arbeiten (Generics verwenden).
Auch interessant war, dass Vererbung und Implementierung von Interfaces einen Massiven Einfluss auf die Performance hat. Methoden die Vererbt, überschrieben oder über ein Interface implementiert wurden waren um ca. das 200fache langsamer als Aufrufe von Methoden aus einfachen Klassen oder Structs.
Und am Schluss kam das aller beste: C# ist schneller als C++! Christian zeigte die gleiche Demo in C++ und C#, dabei war die C# Demo doppelt so schnell wie die C++ Demo. Und es ging noch besser. Mich Codegenerierung per ExpressionTrees halbierte er die Zeiten noch einmal um die hälfte.
Bisher war das auf der BASTA! die beeindruckteste Session :-)