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