日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
關(guān)于C#那些新手易犯的典型缺陷

這段時(shí)間花了點(diǎn)時(shí)間整理了幾個(gè)新手易犯的典型缺陷(專門針對C#的),但是個(gè)人的力量畢竟有限缺陷的覆蓋面比較窄,有些缺陷的描述也不夠準(zhǔn)確,這里先貼出來看看能不能集思廣益,收集整理出更多的典型缺陷。目標(biāo)就是希望剛?cè)腴T.NET的新手看了之后能少走些彎路。

1 及時(shí)釋放資源

CLR托管環(huán)境扮演了垃圾回收的角色,所以你不需要顯式釋放已創(chuàng)建對象所占用的內(nèi)存。但這不意味著你可以忽略所有的使用過的對象。許多對象封裝了其 他類型的系統(tǒng)資源(例如,磁盤文件,數(shù)據(jù)連接,網(wǎng)絡(luò)端口)。保持這些資源的使用狀態(tài)會(huì)急劇的耗盡系統(tǒng)的資源,削弱性能并且最終導(dǎo)致程序出錯(cuò)。當(dāng)你打開一個(gè) 文件、網(wǎng)絡(luò)端口或者數(shù)據(jù)連接時(shí),當(dāng)你不再使用這些資源時(shí),應(yīng)該盡快顯式釋放這些資源。
另外針對資源的操作,一般需要增加異常捕獲處理(Try..Catch),這時(shí)別忘記在finally中進(jìn)行資源釋放,以確保在捕獲異常時(shí)也可以正常釋放資源。

2 正確停止多線程

FileStream fs = File.Open(…);
Try{…} Finally{ fs.Close;}

假設(shè)如上代碼在工作線程中,已經(jīng)進(jìn)行到finally里面,這個(gè)時(shí)候UI線程調(diào)用了該線程的Abort()方法,則很有可能fs.Close還沒有執(zhí)行的時(shí)候,工作線程跳出finally代碼塊了。這樣你的fs就永遠(yuǎn)不會(huì)被Close了。
大多數(shù)情況下,finally會(huì)永遠(yuǎn)被被執(zhí)行,但不包括調(diào)用Thread.Abort所引發(fā)的ThreadAbortException異常,鑒于此理由,不建議使用Abort。
要正確停止線程,不在于調(diào)用者采用了什么行為(不要直接使用Thread.Abort()),而更多依賴于工作線程是否能主動(dòng)響應(yīng)調(diào)用者的停止請求。
大體機(jī)制是,如果線程需要被停止,那么線程自身就應(yīng)該負(fù)責(zé)給調(diào)用者開放Cancel的接口。

3 類型轉(zhuǎn)換相關(guān)

  • 如果從數(shù)據(jù)庫中讀取某個(gè)值,有數(shù)據(jù)時(shí)是int類型,沒有數(shù)據(jù)的話獲取到的是null,類型強(qiáng)轉(zhuǎn)則會(huì)異常。所以一般很少用強(qiáng)轉(zhuǎn),用的話也必須做一個(gè)異常捕獲,避免程序異常。

  • 在強(qiáng)轉(zhuǎn)不好的情況下,我們建議使用TryParse方法,該方法已經(jīng)對Parse方法進(jìn)行了異常處理。

  • 也可以用Convert,同樣需要進(jìn)行異常捕獲;其實(shí),凡是涉及到類型轉(zhuǎn)換,序列化等操作的地方,都需要捕獲異常;

4 字符串操作問題

在對字符串操作中,若涉及大量拼接操作建議使用StringBuilder。若使用String會(huì)帶來明顯的性能損耗。原因在于string對象是 個(gè)很特殊的對象,它一旦被賦值就不可改變。在運(yùn)行時(shí)調(diào)用String類中任何拼接操作(如賦值、”+”等),都會(huì)在內(nèi)存中創(chuàng)建一個(gè)新的字符串對象,也意味 著要為該新對象分配新的內(nèi)存空間。

5 const常量修改導(dǎo)致的問題

當(dāng)程序引用其他dll中的const常量時(shí)要特別引起注意。
若修改了此dll中的const常量后,要重新編譯引用了此dll中這個(gè)const常量的所有程序,否則程序中使用的這個(gè)常量值將和dl中的不一致。
另外如果使用readonly代替const可以解決這個(gè)問題,不需要重新編譯,因?yàn)閏onst是編譯型常量,而readonly是運(yùn)行時(shí)常量。

6 C#編譯目標(biāo)平臺(tái)問題

當(dāng)程序依賴的dll的編譯的目標(biāo)平臺(tái)是X86,則程序本身的編譯目標(biāo)平臺(tái)也必須是X86(而不是默認(rèn)選項(xiàng)Any CPU),否則64位電腦將無法運(yùn)行。

7 跨線程訪問控件

在開發(fā)界面程序時(shí),會(huì)遇到比較耗時(shí)的操作,為了程序的友好性,我們一般會(huì)在任務(wù)線程中執(zhí)行耗時(shí)操作,并將執(zhí)行信息顯示在主UI線程。
假如直接在任務(wù)線程中操作主UI線程中的控件,這樣極易出現(xiàn)異常,報(bào)“不能在其他線程中修改創(chuàng)建控件線程的值”,如果設(shè)置了禁止編譯器對跨線程訪問做檢查,就不會(huì)報(bào)錯(cuò),但是會(huì)出現(xiàn)無法預(yù)知的問題。此時(shí)建議采用委托或匿名委托的方式實(shí)現(xiàn)。


本文名稱:關(guān)于C#那些新手易犯的典型缺陷
標(biāo)題來源:http://m.5511xx.com/article/djjhped.html