C#/.NET易錯的幾點

來源:互聯網
上載者:User
1 及時釋放資源
CLR託管環境扮演了記憶體回收的角色,所以你不需要顯式釋放已建立對象所佔用的記憶體。但這不意味著你可以忽略所有的使用過的對象。許多個物件封裝了其 他類型的系統資源(例如,磁碟檔案,資料連線,網路連接埠)。保持這些資源的使用狀態會急劇的耗盡系統的資源,削弱效能並且最終導致程式出錯。當你開啟一個 檔案、網路連接埠或者資料連線時,當你不再使用這些資源時,應該儘快顯式釋放這些資源。
另外針對資源的操作,一般需要增加異常捕獲處理(Try..Catch),這時別忘記在finally中進行資源釋放,以確保在捕獲異常時也可以正常釋放資源。
2 正確停止多線程
FileStream fs = File.Open(…);
Try{…} Finally{ fs.Close;}
假設如上代碼在背景工作執行緒中,已經進行到finally裡面,這個時候UI線程調用了該線程的Abort()方法,則很有可能fs.Close還沒有執行的時候,背景工作執行緒跳出finally代碼塊了。這樣你的fs就永遠不會被Close了。
大多數情況下,finally會永遠被被執行,但不包括調用Thread.Abort所引發的ThreadAbortException異常,鑒於此理由,不建議使用Abort。
要正確停止線程,不在於調用者採用了什麼行為(不要直接使用Thread.Abort()),而更多依賴於背景工作執行緒是否能主動響應調用者的停止請求。
大體機制是,如果線程需要被停止,那麼線程自身就應該負責給調用者開放Cancel的介面。
3 類型轉換相關
如果從資料庫中讀取某個值,有資料時是int類型,沒有資料的話擷取到的是null,類型強轉則會異常。所以一般很少用強轉,用的話也必須做一個異常捕獲,避免程式異常。
在強轉不好的情況下,我們建議使用TryParse方法,該方法已經對Parse方法進行了異常處理。
也可以用Convert,同樣需要進行異常捕獲;其實,凡是涉及到類型轉換,序列化等操作的地方,都需要捕獲異常;
4 字串操作問題
在對字串操作中,若涉及大量拼接操作建議使用StringBuilder。若使用String會帶來明顯的效能損耗。原因在於string對象是 個很特殊的對象,它一旦被賦值就不可改變。在運行時調用String類中任何拼接操作(如賦值、”+”等),都會在記憶體中建立一個新的字串對象,也意味 著要為該新對象分配新的記憶體空間。
5 const常量修改導致的問題
當程式引用其他dll中的const常量時要特別引起注意。
若修改了此dll中的const常量後,要重新編譯引用了此dll中這個const常量的所有程式,否則程式中使用的這個常量值將和dl中的不一致。
另外如果使用readonly代替const可以解決這個問題,不需要重新編譯,因為const是編譯型常量,而readonly是運行時常量。
6 C#編譯目標平台問題
當程式依賴的dll的編譯的目標平台是X86,則程式本身的編譯目標平台也必須是X86(而不是預設選項Any CPU),否則64位電腦將無法運行。
7 跨線程訪問控制項
在開發介面程式時,會遇到比較耗時的操作,為了程式的友好性,我們一般會在任務線程中執行耗時操作,並將執行資訊顯示在主UI線程。
假如直接在任務線程中操作主UI線程中的控制項,這樣極易出現異常,報“不能在其他線程中修改建立控制項線程的值”,如果設定了禁止編譯器對跨線程訪問做檢查,就不會報錯,但是會出現無法預知的問題。此時建議採用委託或匿名委託的方式實現。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.