中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

C#幾個經(jīng)常犯錯誤匯總
來源:易賢網(wǎng) 閱讀:1383 次 日期:2015-04-02 13:48:05
溫馨提示:易賢網(wǎng)小編為您整理了“C#幾個經(jīng)常犯錯誤匯總”,方便廣大網(wǎng)友查閱!

在我們平常編程中,時間久了有時候會形成一種習(xí)慣性的思維方式,形成固有的編程風(fēng)格,但是有些地方是需要斟酌的,即使是一個很小的錯誤也可能會導(dǎo)致昂貴的代價(jià),要學(xué)會善于總結(jié),從錯誤中汲取教訓(xùn),盡量不再犯同樣錯誤,注重編程之美,代碼的優(yōu)雅,總結(jié)幾個平常經(jīng)常犯的錯誤。

1、在C#編程中,字符型類型是最容易處理出錯的地方,代價(jià)是非常昂貴,在.Net Framwork中,字符串是一個相當(dāng)特別的引用類型,string本省就是一個不可繼承的密封類,但是它具有了值類型所應(yīng)用的特點(diǎn),但是它在CLR中內(nèi)存還是保存于托管堆之上,也就是說,當(dāng)我們每次定義一個字符串類型的時候,就在堆內(nèi)存中開辟一端內(nèi)存,而當(dāng)我們字符串被修改之后,它會創(chuàng)建一個新的內(nèi)存,注意這里的內(nèi)存是不連續(xù)的,而是通過修改棧內(nèi)地址引用而拼湊字符串,不會改變源字符串在內(nèi)存中的地址,所以有些程序員總是喜歡使用這樣的方法格式化字符串:

string SelectText="select * from "+TableName+" where UserName='"+Name+"'";

上述代碼,使用了字符串拼湊的方法,因?yàn)槭褂昧硕嘀卮?lián),因此會在內(nèi)存中創(chuàng)建兩個不必要的字符串垃圾副本。

其實(shí)在C#中,已經(jīng)為我們提供了StringBuilder和String.Fromat來解決此問題,雖然他們可以實(shí)現(xiàn)同樣的功能,但是他們有質(zhì)的變化,StringBuilder在內(nèi)存中開辟的是一段連續(xù)內(nèi)存,當(dāng)增加新字符串時候,它會在棧中指向的同一個堆內(nèi)存中連續(xù)存放字符,這就形成了性能的提升。所以我們將上面代碼改成:

string SelectText=string.Format("select * from {0} where UserName={1}",TableName,Name);

2、大多數(shù)開發(fā)人員都不知道內(nèi)置的驗(yàn)證數(shù)據(jù)類型的方法,如System.Int32,因此很多人都是自己實(shí)現(xiàn)的,其實(shí)這是不妥的,因?yàn)檫@些基本類型中都存在自己固有的類型驗(yàn)證方法,下面這個就是自己實(shí)現(xiàn)驗(yàn)證的一個字符串是否是數(shù)值的代碼:

public bool CheckIfNumeric(string value)

{

bool IsNumeric=true;

try

{

int i=Convert.ToInt32(value);

}

catch(FormatException excepiton)

{

IsNumeric=false;

}

return IsNumeric;

}

雖然使用了try catch語句,這不是最佳的做法,更好的方法是下面使用Int.TryParse;

int output=0;

bool IsNumeric=int.TryParse(value,out output);

int.TryParse是更快、更簡潔的方法。

3、自己利用IDisposable接口手動釋放內(nèi)存

在.NET Framework中,對象的處理和使用一樣重要,理想的方法是在使用完對象的時候,在類中實(shí)現(xiàn)IDisposable接口中的dispose方法進(jìn)行內(nèi)存的釋放,當(dāng)然在.Net本身提供的垃圾回收機(jī)制(GC)中就提供了這樣的功能,在我們實(shí)例化類對象時,在類本身的析構(gòu)函數(shù)中會調(diào)用dispose方法,GC在各級內(nèi)存堆滿的情況下,自動檢查對象使用情況,去相應(yīng)的釋放內(nèi)存,但是運(yùn)行在非托管平臺上的方法,需要我們自己手動釋放內(nèi)存,比如我們常見的SqlConnection對象,也就有了下面的創(chuàng)建、使用和處理方法:

public void DALOneMethod()

{

SqlConnection connection=null;

try

{

connection =new SqlConnection("。。。。。。。。。。。");

connection.Open();

//sqlcommand。。run

}

catch(Exception exception)

{

// manager exception

}

finally

{

connection.Close();

connection.Disopse();

}

}

上述代碼是大部分程序員會出現(xiàn)的代碼,乍看沒啥問題,連接處理在最后一個代碼中被明確調(diào)用,但是如果發(fā)生了一個異常,catch代碼塊就被執(zhí)行,然后再執(zhí)行最后一個代碼塊處理連接,因此在最后一個代碼塊執(zhí)行之前,連接將一直留在內(nèi)存中,大部分我們會在此處記錄錯誤,一般涉及到IO操作,如果延時時間比較長的話,這個連接將在內(nèi)存時間長時間停留。我們一個原則就是當(dāng)對象不再使用的時候我們里面釋放資源。

我們采用程序邏輯域來處理這個問題會更好:

public void DALOneMethod()

{

using(SqlConnction connection=new SqlConnection("。。。。。。。"))

{

connction.Open();

// do SUAD

}

}

當(dāng)使用using代碼快時,對象上的dispose()方法將在執(zhí)行推出邏輯域的時候調(diào)用,這樣就保證了SqlConnection的資源處理被盡早釋放,當(dāng)然這個方法也適用于實(shí)現(xiàn)IDisposable接口的類,當(dāng)時個人不推薦這樣做,在非常有把握的情況下可以手動釋放,但是沒把握還是叫給.net系統(tǒng)釋放,因?yàn)楸旧眍惖奈鰳?gòu)函數(shù)就實(shí)現(xiàn)這個方法,當(dāng)我們自己重寫后,反而會導(dǎo)致系統(tǒng)誤以為你自己定義了方法,而推遲釋放資源,有興趣可以研究下GC運(yùn)行本質(zhì),假如能在第一代被釋放的內(nèi)存,如果我們重寫dispose方法反而推遲到第二代內(nèi)存堆中釋放,顯然是不可取的。

4、學(xué)會合理的管理公共變量,我們在系統(tǒng)中經(jīng)常會濫用公共變量,沒有做到合適的封裝好。

static void Main(string[] args)

{

MyAccount account=new MyAccount();

//這地方不能隨便的調(diào)用account里面的字段進(jìn)行更改,但是缺改了

account.AccountNumber="ddddddddd";

Console.ReadKey();

}

public class MyAccount

{

public string AccountNumber;

public MyAcctount()

{

AccountNumber="ssssssssssssss";

}

}

在上面的MyAccount類中生命了一個AccountNumber公共變量,理想情況下,AccountNumber應(yīng)該是只讀的,不能讓外界修改,但是這里MyAccount類卻沒有對它做任何控制。

聲明公共做法應(yīng)該是使用屬性,如:

public class MyAccount

{

private stirng _accountNumber;

public string AccountNumber

{

get { return _accountNumber; }

}

public MyAccount()

{

_accountNumber="dddddddd";

}

}

這里我們封裝了AccountNumber公共變量,它變成了只讀,不能由調(diào)用者類進(jìn)行修改。

5、嵌套的異常處理,有的開發(fā)人員喜歡在方法末尾加上處理的嵌套方法,如

public class NestedExceptionHandling

{

public void MainMethod()

{

try

{

//some implementation

ChildMethod1();

}

catch (Exception exception)

{

//Handle exception

}

}

private void ChildMethod1()

{

try

{

//some implementation

ChildMethod2();

}

catch (Exception exception)

{

//Handle exception

throw;

}

}

private void ChildMethod2()

{

try

{

//some implementation

}

catch (Exception exception)

{

//Handle exception

throw;

}

}

}

如果相同的異常被處理多次,性能開銷將會增加。

我們的解決方法是讓異常處理方法獨(dú)立開來,如:

public class NestedExceptionHandling

{

public void MainMethod()

{

try

{

//some implementation

ChildMethod1();

}

catch(Exception exception)

{

//Handle exception

}

}

private void ChildMethod1()

{

//some implementation

ChildMethod2();

}

private void ChildMethod2()

{

//some implementation

}

}

6、大數(shù)據(jù)量上使用Dataset和DataReader混用,當(dāng)單表數(shù)據(jù)量很大的情況,使用DataSet是一種很不明智的選擇,應(yīng)為DataSet是以DataTable內(nèi)存形式存放數(shù)據(jù)量,一次性將數(shù)據(jù)拖入內(nèi)存,當(dāng)數(shù)據(jù)很大的情況下,這種方式是很吃內(nèi)存的,相比DataSer,DataReader就顯得優(yōu)雅很多,它是每次讀取一條數(shù)據(jù),然后輪詢調(diào)用機(jī)制,但是也有它的弊端,就是相對長連接,但是對內(nèi)存消耗而言這是有利的,當(dāng)然DataSet在大部分應(yīng)用場景下也是有自己的優(yōu)點(diǎn),充分解耦、一次性操作、領(lǐng)域模型操作等方面,兩者分情況分場景而用,這里只是稍微提提,根據(jù)場景分析區(qū)別。

內(nèi)容更正

原篇文章不動,感謝園友點(diǎn)評,更正幾處內(nèi)容

1、第一條String類型內(nèi)存消耗問題,舉的例子不到位,在字符串?dāng)?shù)量少的時候性能沒有影響的,但就在.net Framwork平臺運(yùn)行,分析應(yīng)該就是此原理了。

現(xiàn)將老趙分析的結(jié)論歸結(jié)如下:

<1>對于字符串?dāng)?shù)量比較少的情況(從數(shù)據(jù)上來看大約是5-6個),StringBuilder的性能并不比普通連接操作來的快。因此,在任何地方都使用StringBuilder是不恰當(dāng)?shù)淖龇ā?/P>

參照:

另附性能比較源碼同樣出自老趙博文,有興趣的園友可自行比較測試:

2、類對象在使用完對象后并不是通過析構(gòu)函數(shù)調(diào)用Dispose方法實(shí)現(xiàn)垃圾回收,Dispose是.net類庫提供的一個釋放內(nèi)存的方法,供開發(fā)人員自行調(diào)用,它是通過Finalizer是供GC調(diào)用。

關(guān)于其他SQL注入、屬性公開知否妥當(dāng)、自行調(diào)用Dispose方法釋放內(nèi)存是否會推遲釋放等觀點(diǎn)都是分應(yīng)用場景而言,算作拋磚引玉吧,非絕對。最后謝園友們指點(diǎn)。

更多信息請查看IT技術(shù)專欄

更多信息請查看技術(shù)文章
易賢網(wǎng)手機(jī)網(wǎng)站地址:C#幾個經(jīng)常犯錯誤匯總
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产伦理一区| 久久精品国产视频| 欧美日本在线| 亚洲欧美日韩综合国产aⅴ| 国产欧美成人| 欧美午夜激情视频| 男男成人高潮片免费网站| 亚洲色图在线视频| 亚洲欧洲美洲综合色网| 欧美日韩国产精品成人| 久久精品成人一区二区三区蜜臀 | 亚洲视频在线免费观看| 亚洲高清三级视频| 国内精品久久久久久久影视麻豆| 欧美性淫爽ww久久久久无| 欧美激情亚洲视频| 欧美精品国产精品| 欧美剧在线免费观看网站| 亚洲免费在线视频| 久久国产66| 欧美精选在线| 久久一二三四| 欧美午夜电影在线观看| 亚洲福利视频三区| 欧美一区二区三区免费在线看| 性欧美办公室18xxxxhd| 欧美大胆人体视频| 很黄很黄激情成人| 亚洲午夜一二三区视频| 国产日韩一区二区| 国产日韩精品久久久| 伊人久久久大香线蕉综合直播 | 欧美日韩一视频区二区| 国产精品视频久久| 亚洲国产日日夜夜| 亚洲无玛一区| 亚洲影院在线观看| 另类成人小视频在线| 欧美特黄一级| 99伊人成综合| 欧美色综合网| 亚洲免费人成在线视频观看| 欧美日韩亚洲一区二区三区在线观看 | 亚洲色图制服丝袜| 欧美刺激午夜性久久久久久久| 极品少妇一区二区| 香蕉国产精品偷在线观看不卡| 99热免费精品在线观看| 亚洲国产成人久久综合| 亚洲国产精品综合| 亚洲一区区二区| 亚洲手机在线| 亚洲激情婷婷| 国产日韩亚洲欧美| 国产日韩精品在线播放| 怡红院精品视频| 韩国av一区二区三区四区| 亚洲激情婷婷| 亚洲一区二区三区四区中文| 性欧美8khd高清极品| 国产精品久久毛片a| 久久国产福利| 亚洲国产精品视频| 国产精品theporn88| 欧美亚洲在线观看| 亚洲人成人99网站| 国产精品视频免费观看| 久久都是精品| 亚洲第一视频| 国产精品一区二区三区免费观看| 欧美体内谢she精2性欧美| 久久国产精品高清| 亚洲人成小说网站色在线| 亚洲激情av在线| 亚洲一二三四久久| 久久精品国语| 欧美日韩视频不卡| 国产亚洲一区二区三区在线播放| 最新高清无码专区| 久久福利电影| 国产精品日日摸夜夜摸av| 影音先锋亚洲视频| 性做久久久久久| 国产精品色婷婷久久58| 亚洲第一区色| 欧美一区二区黄色| 国产女同一区二区| 亚洲欧美日韩精品一区二区 | 国产啪精品视频| 欧美亚洲在线播放| 99视频超级精品| 久久精品一本| 国产精品久久婷婷六月丁香| 国内精品亚洲| 欧美在线视频一区二区三区| 国产精品亚洲精品| 99国产精品国产精品久久| 久久精品国产亚洲5555| 国产精品亚洲不卡a| 午夜精品在线| 国产日韩一区二区三区在线播放 | 欧美三级网页| 99av国产精品欲麻豆| 国产精品女主播在线观看| 一区二区日本视频| 国产精品视频网站| 久久尤物电影视频在线观看| 尤物九九久久国产精品的特点| 裸体丰满少妇做受久久99精品| 亚洲激情欧美| 欧美午夜女人视频在线| 亚洲国产日韩欧美在线动漫| 蜜臀va亚洲va欧美va天堂| 亚洲精品免费在线| 国产日产欧美a一级在线| 久久久久久久久久久一区| 亚洲国产成人不卡| 国产精品久久久久av| 免费亚洲视频| 午夜精品在线| 亚洲激情在线播放| 亚洲国产精品久久久久久女王| 欧美日韩中文字幕| 女人天堂亚洲aⅴ在线观看| 久久亚洲欧美| 亚洲欧美日韩一区在线观看| 日韩一区二区精品| 国产一区二区三区奇米久涩| 欧美色欧美亚洲高清在线视频| 欧美成人国产一区二区| 巨乳诱惑日韩免费av| 久久精品中文| 久久久久综合一区二区三区| 欧美一区二区三区在线看 | 欧美日韩亚洲综合在线| 欧美在线播放视频| 欧美一区二区在线免费观看| 国产精品99久久久久久久久久久久| 国产在线不卡视频| 好看的日韩视频| 国产欧美一级| 激情国产一区二区| 欧美精品一区二区三| 欧美专区亚洲专区| 国产真实乱偷精品视频免| 欧美激情精品久久久久久黑人| 久久久噜久噜久久综合| 久久频这里精品99香蕉| 久热精品在线视频| 欧美金8天国| 国产伦精品一区二区三区照片91| 国产精品免费在线| 在线电影一区| 亚洲一区二区三区午夜| 午夜精品久久久久久久男人的天堂| 久久国产手机看片| 欧美日本精品在线| 国产一区二区| 亚洲午夜久久久久久尤物| 模特精品在线| 欧美日韩黄色大片| 国产精品第一区| 国产一区日韩二区欧美三区| 亚洲欧洲日韩女同| 欧美一区二区三区的| 欧美极品色图| 亚洲国产成人tv| 亚洲激情在线激情| 久久国产综合精品| 国产精品久久久久久久久久免费| 在线看日韩av| 午夜欧美不卡精品aaaaa| 欧美日韩在线三区| 国产日本精品| 午夜精品久久久久久久99水蜜桃 | 久久精品人人做人人爽电影蜜月| 欧美精品一区二区视频| 国内精品模特av私拍在线观看| 亚洲一区二区在线免费观看| 欧美成人黄色小视频| 国产午夜精品美女视频明星a级| 亚洲精品乱码| 欧美二区不卡| 亚洲免费观看高清完整版在线观看熊 | 久久国产精品亚洲va麻豆| 国产精品久久久久久av下载红粉 | 亚洲大片在线| 欧美成人精品h版在线观看| 国产中文一区二区| 巨胸喷奶水www久久久免费动漫| 红桃视频欧美| 欧美国产一区二区在线观看| 一区二区动漫| 国产主播精品在线| 欧美jjzz| 久久国产免费| 日韩一二三在线视频播| 国产毛片久久| 欧美黄污视频| 亚洲福利av|