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

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

ID:39464774

大?。?3.50 KB

頁數(shù):22頁

時間: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é)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

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

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

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

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

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

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

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

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

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

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

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