Quote:
Originally Posted by MrSm!th
Performance-Einbußen durch Exceptions
|
Das ist Unsinn und in der Praxis ist oft sogar das genaue Gegenteil der Fall!
Ich habe da mal ein kleines Beispielprogramm geschrieben:
[Only registered and activated users can see links. Click Here To Register...]
Im Release Modus mit Visual Studio 2013 compiliert bekomme ich folgendes Ergebnis:
Quote:
with exceptions: 47.8477 seconds
without exceptions: 47.8797 seconds
|
Wer sich nun fragt warum die "Performancefresser" schneller sind: die Antwort darauf ist relativ simpel.
Durch all die ifs in dem Code, die du einfügen musst um sicher zu gehen, dass nirgens eine Funktion fehlgeschlagen ist, fressen wesentlich mehr Performance als ein einzelnes throw das jemals könnte!
Zusätzlich dazu blähen dir die ifs den Code dermaßen stark auf, dass du weit mehr als das doppelte an Code schreiben musst, um ein ansatzweise gleichwertiges Ergebnis zu bekommen. Das führt dann dazu, dass dein Code nicht nur schwerer zu warten und zu lesen wird, er wird auch gleich sehr viel fehleranfälliger!
Dass Exceptions dein Programm langsamer machen ist alter Aberglaube der C Fanatiker und - vorausgesetzt man macht es richtig - in der Praxis sind sie meistens sogar schneller, weil sie extrem viel overhead aus dem Code raus nehmen.
Und selbst wenn sie langsamer sein sollten, alleine schon druch den Gewinn an Lesbarkeit in deinem Code sollte man immer zuerst auf sie zurückgreifen, denn Performance ist erst dann ein Argument, wenn du mit einem Profiler dein Programm überprüfst und dann als Ergebnis diese eine throw Anweisung aufgeführt wird.