提高性能的細(xì)節(jié)
從編碼方面提高網(wǎng)站性能的手段
一、緩存
緩存是ASP.NET中提高性能的重要手段,緩存一般遵循以下原則:
1) 在頁面中將靜態(tài)內(nèi)容與動態(tài)內(nèi)容分割開來
考慮將動態(tài)內(nèi)容作成用戶控件
2) 緩存合理的數(shù)據(jù)
一般應(yīng)當(dāng)緩存應(yīng)用程序集的數(shù)據(jù)、多個用戶共同使用的數(shù)據(jù)、靜態(tài)數(shù)據(jù)、生成數(shù)據(jù)需要很大開銷的動態(tài)數(shù)據(jù)、DataSet以及自定義對象等。不要緩存數(shù)據(jù)庫連接對象、DataReader。
3) 選擇適當(dāng)?shù)姆绞?/p>
如可以使用頁面緩存指令,API等。
二、視圖狀態(tài)
視圖狀態(tài)放在頁面中名為_VIEWSTATE的表單隱藏域里面,隨頁面一起被發(fā)送到客戶端,在用戶提交頁面時,又被提交到服務(wù)器。
1) 如果不需要視圖狀態(tài),則禁用
視圖狀態(tài)默認(rèn)是允許的,如果頁面不進(jìn)行PostBack,如果不處理服務(wù)器控件的事件,如果服務(wù)器控件的數(shù)據(jù)每次都需要重新計(jì)算等
2) 盡量減少視圖狀態(tài)中存放的對象
三、 關(guān)于頁面處理(減少頁面生成的時間和過程)
1) 應(yīng)盡量減少頁面文件的大小
2) 通過檢測Page.IsPostBack減少代碼執(zhí)行的數(shù)量
3) 禁止使用Debug=“true”,減少頁面生成過程中生成額外的調(diào)試信息
4) 使用Server.Transfer而不使用Response.Redirect,減少服務(wù)器和客戶端間的往返
5) 盡量使用客戶端驗(yàn)證,減少服務(wù)器和客戶端間的往返
6) 在適當(dāng)?shù)膱龊鲜褂梅?wù)器控件
7) 盡量避免嵌套的服務(wù)器控件
四、 避免使用Page.DataBind和DataBinder.Eval
五、 關(guān)于Application對象和Session對象
1) 使用靜態(tài)屬性存儲數(shù)據(jù)而不使用Application對象,在Application對象里存儲只讀類型的數(shù)據(jù)都將回提高性能
2) 盡量使用InProc模式的Session,這個模式是最快的
3) 在Session里存儲基本類型的數(shù)據(jù)減少序列化的所消耗的資源
4) 如果不用Session變量,使用EnvableViewState=“false”禁用
5) 如果不修改Session變量的值,盡量使用ReadOnly屬性設(shè)置
六、 關(guān)于字符串操作
1) 盡量使用Response.Write將結(jié)果輸出到瀏覽器,這種方法是最快的。不要將字符串連接在一起一次輸出。
2) 在字符串短并且少的情況下可以使用String.Concat方法,而在字符串長度未知,并且字符串大的情況下,使用StringBuilder對象
3) 不要使用strVar==“”來判斷字符串是否為“”,這樣它會創(chuàng)建額外的字符串,請使用strVar==String.Empty代替或者使用strVar.Length==0來判斷
4) 請使用String.Compare方法進(jìn)行字符串的比較
七、 關(guān)于數(shù)據(jù)訪問
1) 盡量使用存儲過程返回數(shù)據(jù),不要直接在代碼中進(jìn)行查詢
2) 在數(shù)據(jù)庫中只返回有用的數(shù)據(jù)結(jié)果,不要選擇不使用的數(shù)據(jù)字段
3) 進(jìn)行使用DataReader進(jìn)行數(shù)據(jù)綁定,DataReader是單向只讀的
4) 盡量一次返回多個數(shù)據(jù)集而不是每個記錄集分別打開一次數(shù)據(jù)庫連接進(jìn)行查詢
5) 盡量晚的打開數(shù)據(jù)庫,盡量早的關(guān)閉數(shù)據(jù)庫
6) 使用連接池提高性能
7) 使用ExecuteNonQuery方法執(zhí)行不返回數(shù)據(jù)的操作,使用ExecuteScalar方法返回單個結(jié)果的操作,使用Commandbehavīor.Sequentialaccess返回二進(jìn)制數(shù)據(jù)或者大數(shù)據(jù)
8) 如果多次相同的查詢,請使用Command.Prepare方法
9) 使用GetOrdinal方法預(yù)先得到索引值,使用索引值比使用字符串的列名查詢數(shù)據(jù)效率更高
八、 關(guān)于代碼優(yōu)化
1) 在解析基本數(shù)據(jù)類型時,使用Try方法如果解析失敗,會拋出異常,使用TryParse方法則只執(zhí)行Else下的語句。
2) 使用AppendAllText、WriteAllBytes等方法讀寫文件內(nèi)容可以優(yōu)化性能
3) 將循環(huán)判定條件放在for語句外
4) 避免在循環(huán)里創(chuàng)建對象
5) 盡量減少裝箱的次數(shù)
6) 不要使用例外控制程序的流程
7) 在循環(huán)中不要使用不變的對象屬性或者字段
8) 使用for循環(huán)代替foreach循環(huán)遍歷結(jié)合內(nèi)容
9) 數(shù)組是所有集合中最快的,如果沒有特殊需要,盡量使用數(shù)組代替集合
10) 了解各個集合類型的特性,選擇合適的類型
11) 使用泛型避免減少裝箱、拆箱
摘自:http://www.51testing.com/?88979/spacelist-blog-page-2.html
posted on 2009-08-24 21:37 石頭@ 閱讀(217) 評論(0) 編輯 收藏 所屬分類: web