Entnommen aus: hier
Das Auslösen und Abfangen von Ausnahmen sollte im Rahmen der erfolgreichen Ausführung einer Methode nicht routinemäßig erfolgen. Bei der Entwicklung von Klassenbibliotheken muss dem Clientcode die Möglichkeit gegeben werden, auf eine Fehlerbedingung zu testen, bevor eine Operation ausgeführt wird, die dazu führen kann, dass eine Ausnahme ausgelöst wird. Beispielsweise bietet System.IO.FileStream eine CanRead-Eigenschaft, die vor dem Aufrufen der Read-Methode überprüft werden kann, um zu verhindern, dass eine potenzielle Ausnahme ausgelöst wird, wie im folgenden Codeausschnitt dargestellt:
Dim str As Stream = GetStream () If (str.CanRead) Dann 'Code zum Lesen des Streams End If
Die Entscheidung, ob der Status eines Objekts vor dem Aufrufen einer bestimmten Methode überprüft werden soll, die eine Ausnahme auslösen kann, hängt vom erwarteten Status des Objekts ab. Wenn ein FileStream-Objekt mit einem Dateipfad erstellt wird, der vorhanden sein sollte, und einem Konstruktor, der eine Datei im Lesemodus zurückgeben soll, ist das Überprüfen der CanRead-Eigenschaft nicht erforderlich. Die Unfähigkeit, den FileStream zu lesen, würde das erwartete Verhalten der durchgeführten Methodenaufrufe verletzen, und es sollte eine Ausnahme ausgelöst werden. Wenn im Gegensatz dazu dokumentiert ist, dass eine Methode eine FileStream-Referenz zurückgibt, die möglicherweise lesbar ist oder nicht, empfiehlt es sich, die CanRead-Eigenschaft zu überprüfen, bevor Sie versuchen, Daten zu lesen.
Um die Auswirkungen auf die Leistung zu veranschaulichen, die die Verwendung einer Codierungstechnik "Bis Ausnahme ausführen" verursachen kann, wird die Leistung einer Umwandlung, die eine InvalidCastException auslöst, wenn die Umwandlung fehlschlägt, mit dem Operator C # as verglichen, der Nullen zurückgibt, wenn eine Umwandlung fehlschlägt. Die Leistung der beiden Techniken ist für den Fall identisch, in dem die Besetzung gültig ist (siehe Test 8.05), aber für den Fall, dass die Besetzung ungültig ist und die Verwendung einer Besetzung eine Ausnahme verursacht, ist die Verwendung einer Besetzung 600-mal langsamer als die Verwendung von als Bediener (siehe Test 8.06). Die Hochleistungseffekte der Ausnahmeauslösungstechnik umfassen die Kosten für das Zuweisen, Auslösen und Abfangen der Ausnahme sowie die Kosten für die nachfolgende Speicherbereinigung des Ausnahmeobjekts, was bedeutet, dass die unmittelbare Auswirkung des Auslösens einer Ausnahme nicht so hoch ist. Wenn mehr Ausnahmen geworfen werden,