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的大小