海闊天空

          I'm on my way!
          隨筆 - 17, 文章 - 69, 評論 - 21, 引用 - 0
          數(shù)據(jù)加載中……

          提高性能的細(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


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东丽区| 阜宁县| 昌江| 凤翔县| 海门市| 仁寿县| 高雄市| 普安县| 兴山县| 富川| 武冈市| 临汾市| 荔浦县| 教育| 台山市| 乃东县| 广宗县| 肥东县| 新田县| 新龙县| 营山县| 白银市| 福海县| 阳泉市| 伊春市| 南和县| 阿克| 丹东市| 镇安县| 江达县| 灵山县| 肇东市| 鄂伦春自治旗| 霍邱县| 根河市| 明水县| 施甸县| 延吉市| 西畴县| 肥乡县| 策勒县|