搜尋
首頁後端開發C#.Net教程C#/.NET易錯的幾點
C#/.NET易錯的幾點Sep 06, 2017 pm 02:25 PM
.net

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#/.NET易錯的幾點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C語言中NULL的替代方案有哪些C語言中NULL的替代方案有哪些Mar 03, 2025 pm 05:37 PM

本文探討了C中的無指針啟用的挑戰。它認為問題本身不是零,而是濫用。 本文詳細介紹了預防退出的最佳實踐,包括提出前檢查,指針pitiberi

c語言編譯器怎麼加下一格c語言編譯器怎麼加下一格Mar 03, 2025 pm 05:44 PM

本文解釋瞭如何使用printf中的\ n逃脫序列在C中創建新線字符並列出函數。 它詳細介紹了功能並提供了代碼示例,以說明其用於輸出中的線路斷裂。

c語言編譯器哪個好?c語言編譯器哪個好?Mar 03, 2025 pm 05:39 PM

本文指導初學者選擇C編譯器。 它認為,海灣合作委員會由於其易用性,廣泛的可用性和廣泛的資源,最適合初學者。 但是,它也比較了海灣室,Clang,MSVC和TCC,突出了它們的差異

C語言中NULL在現代編程中還重要嗎C語言中NULL在現代編程中還重要嗎Mar 03, 2025 pm 05:35 PM

本文強調了NULL在現代C編程中的持續重要性。 儘管取得了進步,但NULL對於明確的指針管理仍然至關重要,從而通過標記沒有有效的內存地址來防止細分故障。 最好的prac

c語言編譯器網頁版有哪些?c語言編譯器網頁版有哪些?Mar 03, 2025 pm 05:42 PM

本文回顧了初學者的在線C編譯器,重點是易用性和調試功能。 在線GDB和REPL。 其他選項,例如Programiz和Compil

c語言在線編程網站 c語言編譯器官方網站匯總c語言在線編程網站 c語言編譯器官方網站匯總Mar 03, 2025 pm 05:41 PM

本文比較在線C編程平台,突出了諸如調試工具,IDE功能,標準合規性和內存/執行限制等功能的差異。 它認為“最佳”平台取決於用戶需求

c語言編譯器複製代碼方法c語言編譯器複製代碼方法Mar 03, 2025 pm 05:43 PM

本文討論了C IDE中的有效代碼複製。 它強調,複製是IDE功能,而不是編譯器功能,並且詳細提高了效率的策略,包括使用IDE選擇工具,代碼折疊,搜索/替換,Templa

c語言編譯器不彈出輸出窗口怎麼解決c語言編譯器不彈出輸出窗口怎麼解決Mar 03, 2025 pm 05:40 PM

本文在C程序編譯中對缺少輸出窗口進行故障排除。 它研究了諸如無法運行可執行文件,程序錯誤,錯誤編譯器設置,背景過程和快速程序終止之類的原因。解決方案涉及ch

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),