溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#新手易犯的問題有哪些

發布時間:2021-12-03 10:31:55 來源:億速云 閱讀:115 作者:iii 欄目:編程語言

本篇內容主要講解“C#新手易犯的問題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#新手易犯的問題有哪些”吧!

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線程中的控件,這樣極易出現異常,報“不能在其他線程中修改創建控件線程的值”,如果設置了禁止編譯器對跨線程訪問做檢查,就不會報錯,但是會出現無法預知的問題。此時建議采用委托或匿名委托的方式實現。

到此,相信大家對“C#新手易犯的問題有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女