Betrachten Sie die folgende Funktion:
%Vor%Parameter
Andere Dinge zu wissen
Problem
Was die Leute bewerten werden, ist mir zu keinem Zeitpunkt in diesem Prozess bekannt, aber ich muss in der Lage sein zu überprüfen, dass etwas (egal was) gleich, größer oder kleiner als etwas anderes ist. Sicher, ich überprüfe andere Dinge, aber ich habe diese Funktion sehr vereinfacht.
Das heißt, die Verwendung von EQUAL oder NOT_EQUAL läuft so schnell wie möglich, wobei Datensätze in einer sehr großen Datei gegen die genannten Kriterien ziemlich schnell und effizient verarbeitet werden. Sobald ich die GREATER_THAN-Logik hinzugefügt habe, ist es langsam ... bis zu dem Punkt, an dem es 20 Minuten dauert, 20-Megabyte-Dateien zu verarbeiten, die früher eine halbe Minute in Anspruch nahmen.
Von dem, was ich sagen kann:
Ja, ich habe einen Mangel an Erfahrung in diesem Bereich und möchte mehr über die Ausnahmebehandlung erfahren und was wirklich hinter den Kulissen passiert, denn wenn die anderen 80% der Datensätze nicht numerisch sind, sind das viele Ausnahmen in einer 20 meg, 80 Tausend Datei aufnehmen.
Gibt es einen besseren Weg, den Cast selbst zu handhaben, um die Effizienz zu erhöhen? Ich habe double.Parse / TryParse gesehen und kann direkt vorbestimmen aber bin mir nicht sicher was am meisten nützt.
Sie können TryParse () für diese Datentypen verwenden. Ausnahmen sind unordentlich und teuer. TryParse gibt true / false zurück, wenn es funktionierte oder nicht, während es keine Ausnahme auslöst. So können Sie einfach die Ergebnisse des Anrufs überprüfen. Viel effizienter als Ausnahmen.
Convert.ToDouble () und Double.Parse () werden Ausnahmen auslösen.
probiere diesen Code. Es ist nicht das Beste, aber es ist besser als das, was du jetzt denkst, weil du nicht weißt, was der Typ sein könnte:
%Vor%Verwenden Sie double.TryParse und DateTime.TryParse anstelle von Convert.ToDouble und DateTime .Parse .
Beispiel:
%Vor%Beachten Sie, dass die Verwendung von Ausnahmen Ihr Programm verlangsamt, da die Laufzeitumgebung im Hintergrund einen Ausnahme-Stack erstellt, um diesen im Falle einer Ausnahme abschalten zu können. Dieser Stapel wird beibehalten, unabhängig davon, ob das Programm ausgelöst wird oder nicht, und dieser Overhead verlangsamt Sie am meisten.
Die anderen Antworten sind wahrscheinlich die beste Lösung in diesem Fall, aber im allgemeinen Fall können Sie Ihre Lösung verbessern, indem Sie die spezifische Ausnahme abfangen, die wahrscheinlich NumberFormatException
oder ClassCastException
ist. Catching Exception
kann alle Arten von lästigen, schwer zu verfolgenden Problemen verursachen (da Sie die Ausnahme nicht protokollieren).
Tags und Links c# exception-handling casting