asp_net性能優(yōu)化總結(jié)

asp_net性能優(yōu)化總結(jié)

ID:39464774

大?。?3.50 KB

頁數(shù):22頁

時(shí)間:2019-07-03

asp_net性能優(yōu)化總結(jié)_第1頁
asp_net性能優(yōu)化總結(jié)_第2頁
asp_net性能優(yōu)化總結(jié)_第3頁
asp_net性能優(yōu)化總結(jié)_第4頁
asp_net性能優(yōu)化總結(jié)_第5頁
資源描述:

《asp_net性能優(yōu)化總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、asp.net性能優(yōu)化總結(jié)1.C#語言方面1.1垃圾回收 垃圾回收解放了手工管理對(duì)象的工作,提高了程序的健壯性,但副作用就是程序代碼可能對(duì)于對(duì)象創(chuàng)建變得隨意?!?.1.1避免不必要的對(duì)象創(chuàng)建 由于垃圾回收的代價(jià)較高,所以C#程序開發(fā)要遵循的一個(gè)基本原則就是避免不必要的對(duì)象創(chuàng)建。以下列舉一些常見的情形?!?.1.1.1避免循環(huán)創(chuàng)建對(duì)象★ 如果對(duì)象并不會(huì)隨每次循環(huán)而改變狀態(tài),那么在循環(huán)中反復(fù)創(chuàng)建對(duì)象將帶來性能損耗。高效的做法是將對(duì)象提到循環(huán)外面創(chuàng)建?!?.1.1.2在需要邏輯分支中創(chuàng)建對(duì)象 如果對(duì)象只在某些

2、邏輯分支中才被用到,那么應(yīng)只在該邏輯分支中創(chuàng)建對(duì)象。 1.1.1.3使用常量避免創(chuàng)建對(duì)象 程序中不應(yīng)出現(xiàn)如newDecimal(0)之類的代碼,這會(huì)導(dǎo)致小對(duì)象頻繁創(chuàng)建及回收,正確的做法是使用Decimal.Zero常量。我們有設(shè)計(jì)自己的類時(shí),也可以學(xué)習(xí)這個(gè)設(shè)計(jì)手法,應(yīng)用到類似的場(chǎng)景中?!?.1.1.4使用StringBuilder做字符串連接1.1.2不要使用空析構(gòu)函數(shù)★ 如果類包含析構(gòu)函數(shù),由創(chuàng)建對(duì)象時(shí)會(huì)在Finalize隊(duì)列中添加對(duì)象的引用,以保證當(dāng)對(duì)象無法可達(dá)時(shí),仍然可以調(diào)用到Finalize方法

3、。垃圾回收器在運(yùn)行期間,會(huì)啟動(dòng)一個(gè)低優(yōu)先級(jí)的線程處理該隊(duì)列。相比之下,沒有析構(gòu)函數(shù)的對(duì)象就沒有這些消耗。如果析構(gòu)函數(shù)為空,這個(gè)消耗就毫無意義,只會(huì)導(dǎo)致性能降低!因此,不要使用空的析構(gòu)函數(shù)?!≡趯?shí)際情況中,許多曾在析構(gòu)函數(shù)中包含處理代碼,但后來因?yàn)榉N種原因被注釋掉或者刪除掉了,只留下一個(gè)空殼,此時(shí)應(yīng)注意把析構(gòu)函數(shù)本身注釋掉或刪除掉?!?.1.3實(shí)現(xiàn)IDisposable接口 垃圾回收事實(shí)上只支持托管內(nèi)在的回收,對(duì)于其他的非托管資源,例如WindowGDI句柄或數(shù)據(jù)庫連接,在析構(gòu)函數(shù)中釋放這些資源有很大問題

4、。原因是垃圾回收依賴于內(nèi)在緊張的情況,雖然數(shù)據(jù)庫連接可能已瀕臨耗盡,但如果內(nèi)存還很充足的話,垃圾回收是不會(huì)運(yùn)行的?!#的IDisposable接口是一種顯式釋放資源的機(jī)制。通過提供using語句,還簡化了使用方式(編譯器自動(dòng)生成try...finally塊,并在finally塊中調(diào)用Dispose方法)。對(duì)于申請(qǐng)非托管資源對(duì)象,應(yīng)為其實(shí)現(xiàn)IDisposable接口,以保證資源一旦超出using語句范圍,即得到及時(shí)釋放。這對(duì)于構(gòu)造健壯且性能優(yōu)良的程序非常有意義!為防止對(duì)象的Dispose方法不被調(diào)用的情

5、況發(fā)生,一般還要提供析構(gòu)函數(shù),兩者調(diào)用一個(gè)處理資源釋放的公共方法。同時(shí),Dispose方法應(yīng)調(diào)用System.GC.SuppressFinalize(this),告訴垃圾回收器無需再處理Finalize方法了。1.2String操作 1.2.1使用StringBuilder做字符串連接 String是不變類,使用+操作連接字符串將會(huì)導(dǎo)致創(chuàng)建一個(gè)新的字符串。如果字符串連接次數(shù)不是固定的,例如在一個(gè)循環(huán)中,則應(yīng)該使用StringBuilder類來做字符串連接工作。因?yàn)镾tringBuilder內(nèi)部有一個(gè)St

6、ringBuffer,連接操作不會(huì)每次分配新的字符串空間。只有當(dāng)連接后的字符串超出Buffer大小時(shí),才會(huì)申請(qǐng)新的Buffer空間。典型代碼如下:StringBuildersb=newStringBuilder(256);for(inti=0;i

7、tringstr=str1+str2+str3+str4; 會(huì)被編譯為String.Concat(str1,str2,str3,str4)。該方法內(nèi)部會(huì)計(jì)算總的String長度,僅分配一次,并不會(huì)如通常想象的那樣分配三次。作為一個(gè)經(jīng)驗(yàn)值,當(dāng)字符串連接操作達(dá)到10次以上時(shí),則應(yīng)該使用StringBuilder?!∵@里有一個(gè)細(xì)節(jié)應(yīng)注意:StringBuilder內(nèi)部Buffer的缺省值為16,這個(gè)值實(shí)在太小。按StringBuilder的使用場(chǎng)景,Buffer肯定得重新分配。經(jīng)驗(yàn)值一般用256作為Buffe

8、r的初值。當(dāng)然,如果能計(jì)算出最終生成字符串長度的話,則應(yīng)該按這個(gè)值來設(shè)定Buffer的初值。使用newStringBuilder(256)就將Buffer的初始長度設(shè)為了256?!?.2.2避免不必要的調(diào)用ToUpper或ToLower方法 String是不變類,調(diào)用ToUpper或ToLower方法都會(huì)導(dǎo)致創(chuàng)建一個(gè)新的字符串。如果被頻繁調(diào)用,將導(dǎo)致頻繁創(chuàng)建字符串對(duì)象。這違背了前面講到的“避免頻繁創(chuàng)建對(duì)象”這一基本原則?!±纾琤ool.P

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。