Nur 5 mal schneller? Du überraschst mich. Vermutlich bedeutet dies, dass Ihre Beispieldaten nicht viele Nullen enthalten.
Ausnahmen sind teurer als einfache Vergleiche. Bei richtiger Anwendung (d. H. Bei außergewöhnlichen Umständen) beeinträchtigen sie die Leistung nicht wesentlich - denn wenn Sie genügend Ausnahmen dafür ausstellen, um eine große Wirkung zu erzielen, besteht die Gefahr, dass Ihr Service bereits abgespritzt wird. Es macht ein Problem, wenn Sie Ausnahmen verwenden, um zu versuchen, Bedingungen zu ignorieren, mit denen Sie sehr leicht testen können - wie diese.
Eine Anmerkung zu den Kosten von Ausnahmen: Sie kosten viel mehr im Debugger als bei Ausführung ohne angehängten Debugger; Insbesondere die erste Ausnahme, die eine Menge Ressourcen laden muss, kann Sekunden statt Mikro / Millisekunden dauern. Wenn Sie Code benchmarken, ist es wichtig, dass Sie es nicht in einem Debugger tun - das gilt im Allgemeinen, aber besonders für Ausnahmen.
Weil Ausnahmen teuer sind.
Wenn eine Ausnahme ausgelöst wird, muss die Laufzeitumgebung eine große Menge an Informationen (z. B. Stack-Traces) auswählen und aufblähen. Dies kostet Zeit und Ressourcen, wenn ein Test für 0-Wert im Vergleich sehr günstig ist.
Siehe diese SO-Frage , in der Sie gefragt werden, wie teuer Ausnahmen für weitere Informationen sind.
Err, weil Ausnahmen langsamer als das Überprüfen sind. Ausnahmen enthalten im Allgemeinen eine Menge Infrastruktur, die eine einfache if
-Anweisung nicht enthält.
Sie sind keine äquivalenten Operationen, da Sie viele Informationen in einer Ausnahme erhalten haben , auch wenn Sie sie in diesem Fall nicht verwenden .
Warum sind Ausnahmen langsam?
Da passiert viel, wenn eine Ausnahme ausgelöst und abgefangen wird. Siehe Chris Brummes Beitrag zum verwalteten Ausnahme-Modell und diesen Beitrag zum zugrunde liegenden Win32 SEH-Modell für Details.
Warum ist ein einfacher Test schnell?
Weil es nur eine Anweisung ausführt, um abhängig vom Ergebnis des Vergleichs zweier Ganzzahlen zu springen, was viel weniger Arbeit ist als eine Ausnahme.
Heißt das, ich sollte immer versuchen, Ausnahmen zu vermeiden?
Nein, das hängt von der Semantik ab. Wenn das Zerlegen durch Null ein wahrer Ausnahmefall ist, den Sie nicht erwarten und den Ihr Programm nicht vernünftig handhaben kann, dann lassen Sie die Ausnahme auftreten und stürzen Sie Ihr Programm ab. Wenn es jedoch ein erwarteter Fall ist und Sie vernünftig damit umgehen können, ist es sinnvoll, die Ausnahme zu vermeiden.
Tags und Links .net c# performance exception division