2011-11-11 9 views
5

Szukałem kodu, który refaktoryzuję i zauważam, że próbuję ... kod catch zawija całkiem sporo kodu, nie ze wszystkich, które wyrzuciłoby "normalne" wyjątki, tj. Kod nie rzuciłby się w ogóle lub gdyby czy byłyby to całkowicie fatalne wyjątki, takie jak wyjątki z pamięci.Czy próba owinięcia nadmiernego kodu jest akceptowalna?

Zastanawiam się teraz, czy zawijanie zbyt dużej ilości instrukcji try może powodować problemy z wydajnością?

Więc widzę coś takiego:

try 
{ 
    // Won't throw (I think that is the case anyway!) 
    if (e.Error == null) 
    { 
     return; 
    } 

    // Only fatal exceptions 
    myClass c = new myClass(); 

    // Now carry out the code that could cause catchable exception 
} 
catch 
{ 
} 
+0

'e.Error' * wyrzuci wyjątek, jeśli' e' ma wartość null. –

+0

Komentarz fair :-) Ze względu na moje pytanie przyjmijmy, że e nie jest zerowe. Właśnie zastanawiałem się, czy spróbuj owijania zwiększa wydajność naprawdę – Firedragon

+0

+1 Dobre pytanie, id być zainteresowany, aby wiedzieć to też – Purplegoldfish

Odpowiedz

3

Występuje problem z wydajnością? Nic, co powinno być zauważalne, naprawdę. Jednak z perspektywy polowania na błędy może to być koszmar. Kiedy owinąć 100 linii kodu, próbuj/złap mocniej, aby dowiedzieć się, które z tych 100 linii rzuciło wyjątek. I pomimo całej logiki (a właściwie z powodu błędnej ludzkiej logiki), kod "nigdy nie powinien rzucać wyjątku" często wyrzuca najwięcej.

Mówię, jeśli masz kod, który nie powinien nigdy wyrzucać wyjątku, a następnie wykonaj jego kopię zapasową, nie owijając go w blok try/catch. W przeciwnym razie spróbuj/złap swoją metodę Main i skończ z nią.

+0

To jest doskonały punkt, jeśli chodzi o możliwość śledzenia wyjątków, jeśli jest zbyt owinięte. Nawet tego nie rozważałem. – Firedragon

3

ile wyjątek jest naprawdę rzucony try-catch nie daje wymierny spadek wydajności.

Powiązane problemy