Das folgende Codebit fängt die EOS-Ausnahme ab
using (var reader = new BinaryReader(httpRequestBodyStream)) {
try {
while (true) {
bodyByteList.Add(reader.ReadByte());
}
} catch (EndOfStreamException) { }
}
Warum erhalte ich in meiner Konsole immer noch Ausnahmen der ersten Chance?
In mscorlib.dll ist eine Ausnahme vom Typ 'System.IO.EndOfStreamException' aufgetreten
Gibt es eine Möglichkeit, diese Ausnahmemeldungen der ersten Chance auszublenden?
Um zu vermeiden, dass die Nachrichten angezeigt werden, klicken Sie mit der rechten Maustaste auf das Ausgabefenster und deaktivieren Sie "Ausnahmemeldungen".
Es kann jedoch hilfreich sein, sie zu sehen, wenn Sie wissen möchten, wann Ausnahmen ausgelöst werden, ohne Haltepunkte festzulegen und den Debugger neu zu konfigurieren.
quelle
1) In Visual Studio können Sie die Einstellungen für die Behandlung (Unterbrechung) von Ausnahmen durch den Debugger ändern.
Gehen Sie zu Debug> Ausnahmen. (Beachten Sie, dass dies abhängig von Ihrer Visual Studio-Umgebungseinstellung möglicherweise nicht in Ihrem Menü enthalten ist. Wenn Sie es nicht einfach über das Menü Anpassen zu Ihrem Menü hinzufügen.)
Dort wird Ihnen ein Dialog mit Ausnahmen angezeigt und wann Sie darauf verzichten müssen.
In der Zeile "Common Language Runtime Exceptions" können Sie die Auswahl von "geworfen" deaktivieren (was Sie dann nicht mehr über Ausnahmen der ersten Chance stören sollte) und Sie können auch die Auswahl von "User-unhandeled" (was ich nicht empfehlen würde) deaktivieren, wenn Sie möchten.
2) Die Nachricht, die Sie erhalten, sollte sich nicht in der Konsole befinden, sondern im Fenster "Ausgabe" von Visual Studio angezeigt werden. Wenn letzteres der Fall ist, habe ich keine Möglichkeit gefunden, dies zu entfernen, aber es wird nicht angezeigt, wenn Sie die App ohne Visual Studio ausführen.
Hoffentlich hilft das.
quelle
Im Gegensatz zu Java sind .NET-Ausnahmen in Bezug auf die Verarbeitungsleistung ziemlich teuer, und behandelte Ausnahmen sollten im normalen und erfolgreichen Ausführungspfad vermieden werden.
Sie vermeiden nicht nur Unordnung im Konsolenfenster, sondern verbessern auch Ihre Leistung und machen Leistungsindikatoren wie .NET CLR-Ausnahmen aussagekräftiger.
In diesem Beispiel würden Sie verwenden
while (reader.PeekChar() != -1) { bodyByteList.Add(reader.ReadByte()); }
quelle
Ich hatte dieses Problem und konnte nicht herausfinden, wo die Ausnahme ausgelöst wurde. Meine Lösung bestand also darin, Visual Studio zu ermöglichen, die Ausführung dieser Art von Ausnahme zu beenden.
quelle
Wenn Sie mehr Kontrolle über diese Nachrichten wünschen, können Sie einen Handler hinzufügen:
Friend Sub AddTheHandler() AddHandler AppDomain.CurrentDomain.FirstChanceException, AddressOf FirstChanceExceptionHandler End Sub <Conditional("DEBUG")> Friend Sub FirstChanceExceptionHandler( source As Object, e As Runtime.ExceptionServices.FirstChanceExceptionEventArgs) ' Process first chance exception End Sub
Auf diese Weise können Sie sie wie in anderen Kommentaren erwähnt zum Schweigen bringen, stellen jedoch sicher, dass Sie sich ihrer bewusst sind. Ich finde es gut zu sehen, wie viele ich wirklich werfe, wenn ich eine Nachricht und einen Zeitstempel in einer Textdatei protokolliere.
quelle
Wenn Sie viele Ausnahmen pro Sekunde haben, müssen Sie eine bessere Leistung erzielen, indem Sie den Reader überprüfen. EndOfStream-Wert. Das Ausdrucken dieser Ausnahmemeldungen ist unglaublich langsam, und das Ausblenden in Visual Studio beschleunigt nichts.
quelle
in VB.NET:
<DebuggerHidden()> _ Public Function Write(ByVal Text As String) As Boolean ...
quelle
DebuggerHiddenAttribute
nur bedeutet, dass die Ausnahme der ersten Chance in der aufrufenden Methode und nicht in der Methode selbst angezeigt wird.Ich denke, der Stream löst diese Ausnahme aus, daher ist Ihr Versuch zu eng, um sie abzufangen.
Fügen Sie noch ein paar weitere Catch-Combos für die verschiedenen Bereiche hinzu, bis Sie sie dort abfangen, wo sie tatsächlich geworfen werden. Dies scheint jedoch auch außerhalb unserer Verwendung zu geschehen, da das Stream-Objekt nicht im Bereich der Verwendung erstellt wird.
quelle