ASP.NET性能優(yōu)化
2024-07-10 13:04:25
供稿:網(wǎng)友
 
衡量web性能的方法
l         衡量web服務(wù)器性能的唯一方式是對服務(wù)器進(jìn)行壓力測試(stress testing)
1.        自動(dòng)壓力測試工具是衡量的唯一方式
2.        瀏覽器的點(diǎn)擊刷新并不能作為痕量手段……
 
l         收集多個(gè)典型應(yīng)用場景方案:
1.        在應(yīng)用車工女婿執(zhí)行過程中模擬典型事物處理的過程
2.        痕量常用的單個(gè)頁面的性能(熱點(diǎn))
3.        確定個(gè)場景及個(gè)頁面的使用率
 
l         通過測試找出系統(tǒng)的新能指標(biāo):
1.        服務(wù)器的處理能力
2.        確定適合可接受ttfb/ttlb響應(yīng)時(shí)間范圍的可支持的最大客戶端負(fù)載(并發(fā)用戶)
 
 
性能測試工具
l         微軟web application stress tool
1.        可免費(fèi)下載(10mb),適用于xp、2000、2003
2.        http://www.microsoft.com/technet/treeview/default.aspx?url=/technet/itsolutions/intranet/downloads/webstres.asp
 
l         微軟應(yīng)用程序中心測試工具(microsoft application center test)
1.        作為vs.net enterprise 的一部分提供給客戶
2.        啟用更豐富的腳本及報(bào)告
 
 
主要的性能測試觀測項(xiàng)perfmon counters
l         processor,cpu % utilization
low numbers = blocking or lock contention
 
l         asp.net,requests in application queue
出現(xiàn)線型增長時(shí)表示服務(wù)器已達(dá)滿負(fù)荷
 
l         asp.net,applications,requests/sec
動(dòng)態(tài)吞吐量(應(yīng)保持一致、無大的波動(dòng))
 
l         asp.net,applications,errors total
預(yù)示著功能級錯(cuò)誤(應(yīng)為0)
 
l         asp.net app/worker process restarts
表示有嚴(yán)重錯(cuò)誤編程級錯(cuò)誤(應(yīng)為0)
壓力測試環(huán)境的注意事項(xiàng)
l         在獨(dú)立與web服務(wù)器及應(yīng)用服務(wù)器的機(jī)器上運(yùn)行壓力測試工具
1.        否則工具將超出服務(wù)器cpu的最大范圍
2.        對于繁重的負(fù)載使用多個(gè)客戶端機(jī)器
 
l         對測試進(jìn)行配置,以模擬不同的客戶端帶寬級別
1.        特定用于衡量56k撥號
 
l         消除應(yīng)用之外的任何瓶剄:
1.        網(wǎng)絡(luò)、客戶端等
 
 
邏輯設(shè)計(jì)
l         建議:采用3層邏輯模型
1.        pages and user controls ui
2.        business and data access classes in /bin dir
3.        data withwin a sql database via sprocs
 
l         設(shè)計(jì)系統(tǒng)時(shí)要考慮到scale-out的情形
1.        不要假設(shè)客戶端的請求
 
l         永遠(yuǎn)會(huì)返回到同一機(jī)器
 
 
使用最佳的data provider
l         ado.net 可支持多個(gè)provider:
1.        system.data.sqlclient
2.        system.data.oracleclient
3.        system.data.oledb
4.        system.data.odbc
 
l         所有provider的編程模型相同
1.        但是性能方面存在明顯差異
 
l         建議:使用最佳
1.        在訪問msde/sql 是始終使用sqlclient
2.        在訪問oracle時(shí)始終使用oracleclient
 
 
 
 
datareader vs.datasets
l         datareader
1.        對查詢的結(jié)果提供了單向讀取的操作
2.        輕量快速-但在reader關(guān)閉之前數(shù)據(jù)庫始終處于連接狀態(tài)
 
l         dataset
1.        非連接的數(shù)據(jù)訪問方式
2.        內(nèi)部使用datareader用戶獲取數(shù)據(jù)
3.        在完成dataset的獲取后會(huì)自動(dòng)關(guān)閉datareader
 
l         which is better?
1.        依賴于你的應(yīng)用
2.        原則上在middle_tier設(shè)計(jì)到大量數(shù)據(jù)處理或進(jìn)行離線的數(shù)據(jù)訪問時(shí)建議使用dataset
 
 
連接池
l         ado.net擁有內(nèi)置的連接遲
1.        自動(dòng)緩寸/重新使用連接
2.        不必為此編寫任何代碼
 
l         代碼建議
1.        “在后期打開代碼中的連接,然后在早期將其關(guān)閉”
2.        切無長時(shí)間保持連接狀態(tài) – 切無嘗試構(gòu)建你自己的“智能”連接池邏輯
3.        完成后應(yīng)立即顯示地關(guān)閉數(shù)據(jù)庫連接,以將其返回致池中
 
l         優(yōu)化提示:
1.        不同的連接字符串可以生成多個(gè)不同的連接池
2.        在web.config中存儲(chǔ)單個(gè)連接字符串
3.        使用configurationsettings.appsettings以在運(yùn)行時(shí)采用編程形式對其進(jìn)行訪問
4.        觀察”.net clr數(shù)據(jù)“性能計(jì)數(shù)器,以變對由adp.net維護(hù)的連接池?cái)?shù)量保持
 
 
使用存儲(chǔ)過程
l         建議將sproc用于數(shù)據(jù)存取
1.        通過dba進(jìn)行更輕松的性能調(diào)試
2.        通過使用數(shù)據(jù)庫事務(wù)處理避免出現(xiàn)分布事務(wù)成本
3.        有助于防止sql注入攻擊
4.        有助與消除應(yīng)用與數(shù)據(jù)庫反復(fù)調(diào)用的成本
 
 
 
服務(wù)器控件
l         對性能優(yōu)化而言有兩點(diǎn)需要注意:
1.        viewstate
2.        number of controls generated(especially for lists)
 
 
viewstate管理
l         asp.net controls能夠維護(hù)頁面control元素的狀態(tài):
1.        狀態(tài)以”viewstate” hidden field進(jìn)行傳遞
 
l         負(fù)面影響:
1.        增加網(wǎng)絡(luò)負(fù)荷(both on render and postback)
2.        額外的服務(wù)器性能消耗(serialize values to/from viewstate)
 
l         viewstate靈活性:
1.        頁面級(can disable viewstate entirely for a page)
2.        控件級(can disable viewstate usage on a per control basis)
 
l         建議
1.        認(rèn)真審核該功能的使用
2.        若不使用postback功能,在頁面級屏蔽viewstate
3.        postback時(shí)沒次都重新生成控件,請對控件級的viewstate屏蔽
4.        使用<%@ page trace=”true”%>跟蹤viewstate的大小