.NET異常處理最佳實踐方案

jopen 11年前發布 | 12K 次閱讀 .NET .NET開發

       關于.NET的異常處理,其實和JAVA是非常類似的,都是有了GC(垃圾回收器)。而在早期的VB/C/C++中貌似是沒有垃圾回收這個說法的,關于GC的各個好處大家都心知肚明了。那么,我們各位“猿”應該如何利用GC,更高效的編程呢?

        說實話,這部分內容不太好整理,也不太好說明白。這些天反復整理這些內容,總覺得沒有抓住重點,花了非常大的功夫。后來想想,了解他的機制,倒不如多學學如何更好的利用它。

        在此之前,先說一些基本的概念。

        錯誤:程序中的錯誤一般分為三類:語法錯誤、邏輯錯誤、運行時錯誤。在異常處理中,錯誤主要說的是運行時錯誤,即已編譯好的程序在執行過程中出現的問題。

        異常:由于錯誤的出現,運行時創建的用于處理錯誤的對象。

        這里要強調的是:錯誤是指一個事件,而異常則是為了處理這個事件而創建的對象。

 

        這里給出一些好的實踐方案,或者也可是說是異常處理原則。

        1、及早檢查。

                發現問題越早,這個問題就越容易解決
        2、不要相信外部數據

                所有的外部數據都應該被檢查(數據庫、文件、鍵盤等)
        3、盡量不要拋出new Exception()

                Exception是一個非常大的類,包含的信息量大
                盡量使拋出的異常有針對性,能提供有意義的錯誤信息。
        4、記錄異常

                如果你捕獲一個異常,一定要在某處加以記錄,不要只記錄.message中的信息,要記錄所有的錯誤信息。
        5、不要吞掉異常

                你做的最糟糕的事情是在catch (Exception)后加了一個空的模塊。
        6、經常使用Using

                即使在有異常出現的地方,關鍵字using也會阻止資源泄漏。例如

            using(SqlConnection conn = new SqlConnection())  
            {  
                //do something;  
            }  
    7、不要把異常處理方法作為從函數中返回信息的手段(不要用異常控制流程)

                不僅異常的處理緩慢,而且代碼中許多的try/catch模塊會導致代碼很難維護。
        8、為那些不該被忽略的錯誤使用異常

                如果方法的執行有一定的要求或者前提,則應該使用異常,這樣調用程序就不能忽略它(例如,某些方法需要用戶信息)
        9、當再次拋出異常時不要清空堆棧追蹤

 

                 Try  {

                        }
                 catch(Exception ex)
                 {

                     //錯誤的方式

                      throw ex;

                 }

                Try{

                      }
                catch(Exception ex)
                 {

                      //正確的方式

                     throw ;

                 }

       這里都是說捕獲到異常之后再次拋出,之所以說第一種情況是錯誤,是因為,第一種情況下,拋出的是新的異常,原來的異常信息被覆蓋掉了。而第二種情況會保留捕獲到的異常信息,在原來錯誤的基礎之上增加新的錯誤信息以拋出。

        10、異常應該用[Serializable]標識

                多數情況下需要異常是可序列化的。當從另一個異常類繼承的時候,不要忘記增添這一屬性。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!