1禀忆、使用StringBuilder代替使用string 連接符 "+"
說(shuō)明:String類(lèi)對(duì)象是不可變的(只讀),一旦創(chuàng)建該對(duì)象,就不能修改該對(duì)象的值哈踱。
對(duì)象String對(duì)象的重新賦值,本質(zhì)上是重新創(chuàng)建了一個(gè)String對(duì)象并將新的值賦值給該對(duì)象梨熙。
如果字符串存在較多次的拼接時(shí)候开镣,最后使用StringBuilder類(lèi),需要引用命名空間 System.Text咽扇。
該類(lèi)不是創(chuàng)建新的對(duì)象邪财,而是通過(guò)Append陕壹、Insert、Remove等方法對(duì)字符串直接進(jìn)行操作树埠,最后通過(guò)
ToString方法返回操作結(jié)果糠馆。從而避免創(chuàng)建大量對(duì)象,造成資源浪費(fèi)怎憋、性能降低榨惠。
例如:
//不要這樣寫(xiě)
String str="bei";
str+="jing";
str+="huan";
str+="ying";
str+="ni";
//推薦這樣寫(xiě)
StringBuilder str=new StringBuilder();
str.Append("bei");
str.Append("jing");
str.Append("huan");
str.Append("ying");
str.Append("ni");
2、用foreach 代替 for 循環(huán)
如果是可以使用foreach的時(shí)候盛霎,盡量用foreach赠橙,而不是 for。前者的效率比后者要高很多愤炸。
3期揪、使用HashTable 代替其他字典集合類(lèi)型(如 StringDictionary、NameValueCollection)规个,存放少量數(shù)據(jù)的時(shí)候可以使用HashTable凤薛。
4、避免使用ArrayList
因?yàn)锳rrayList使用的時(shí)候存在裝箱诞仓、拆箱會(huì)造成性能的損失缤苫,可以用泛型來(lái)代替。
5墅拭、如果是字符進(jìn)行比較的時(shí)候可以采用String.Compare,它會(huì)忽略大小寫(xiě)進(jìn)行比較活玲,而不要使用UpperCase、Lowercase轉(zhuǎn)換后進(jìn)行比較谍婉。
6舒憾、如果只是從xml對(duì)象中讀取數(shù)據(jù),可以用只讀的XPathDocument代替XMLDocument穗熬,可以提高性能镀迂。
7、C#捕獲異常的時(shí)候唤蔗,不要使用通用的System.Exception探遵。可以根據(jù)程序邏輯考慮可能出現(xiàn)的異常進(jìn)行控制妓柜。
8箱季、要避免在循環(huán)體內(nèi)聲明變量,如果可以的化领虹,最好放在循環(huán)體外聲明规哪,在循環(huán)體內(nèi)初始化。
9塌衰、采用using和try/finaly來(lái)做資源清理
10诉稍、不要使用異常(Exception)來(lái)控制程序的流程
因?yàn)椴东@異常對(duì)性能的損耗很大蝠嘉,最好不要用異常去控制程序的流程。
11杯巨、使用值類(lèi)型的ToString方法避免裝箱操作蚤告。
因?yàn)橹殿?lèi)型到引用類(lèi)型會(huì)造成性能的損耗,所以使用值類(lèi)型的ToString方法可以避免裝箱造成的性能損耗服爷。
12杜恰、避免濫用反射,反射也是比較浪費(fèi)性能的操作
當(dāng)使用反射來(lái)調(diào)用類(lèi)型或者觸發(fā)方法仍源,或者訪問(wèn)一個(gè)字段或者屬性是心褐,CLR需要做很多工作:校驗(yàn)參數(shù)、檢查權(quán)限笼踩、
所以非常耗時(shí)逗爹,因此這樣的情況下要盡量避免反射的使用。
歡迎關(guān)注我的公眾號(hào)嚎于,定期推送文章:原文