程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 在C#中老手易犯的典范缺點

在C#中老手易犯的典范缺點

編輯:C#入門知識

在C#中老手易犯的典范缺點。本站提示廣大學習愛好者:(在C#中老手易犯的典范缺點)文章只能為提供參考,不一定能成為您想要的結果。以下是在C#中老手易犯的典范缺點正文


這段時光花了點時光整頓了幾個老手易犯的典范缺點(專門針對C#的),然則小我的力氣究竟無限缺點的籠罩面比擬窄,有些缺點的描寫也不敷精確,這裡先貼出來看看能不克不及群策群力,搜集整頓出更多的典范缺點。目的就是願望剛入門.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線程中的控件,如許極易湧現異常,報“不克不及在其他線程中修正創立控件線程的值”,假如設置了制止編譯器對跨線程拜訪做檢討,就不會報錯,然則會湧現沒法預知的成績。此時建議采取拜托或匿名拜托的方法完成。

以上就是總結了7種老手易犯的典范缺點,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved