有的時(shí)候我們的 web 應(yīng)用程序在本機(jī)測試的時(shí)候,速度很快,可放在局域網(wǎng)上測試的時(shí)候,卻會發(fā)現(xiàn)存在性能問題;甚至有時(shí)在局域網(wǎng)速度正常的應(yīng)用,在廣域網(wǎng)上還會發(fā)現(xiàn)問題。這些問題一般都是應(yīng)用中的疏忽或錯(cuò)誤,并不涉及到系統(tǒng)架構(gòu),通過真實(shí)環(huán)境的調(diào)試和測試都能找到問題所在并解決。
今天我們所要說的是通過改善架構(gòu)來從根本上提高 asp.net 應(yīng)用程序的性能。
我們先來對 asp.net 的幾個(gè)簡單的應(yīng)用做一下測試。
測試環(huán)境:athlonxp 3200+,ddr400 512m,windowsxp sp2,本機(jī)的sql server 2000,中文 northwind 數(shù)據(jù)庫(從access導(dǎo)入)的產(chǎn)品表,約70條記錄。
| 測試序號 | 程序類型 | 測試方法 | 測試結(jié)果 (每秒請求數(shù)) | sqlserver 所占用資源 | asp.net 所占用資源 |
| 1 | web服務(wù) | 用產(chǎn)品表填充dataset,并返回記錄數(shù) | 250次 | 100% | - |
| 2 | web服務(wù) | 用產(chǎn)品表填充dataset,并返回 dataset | 138次 | 54% | 46% |
| 3 | web應(yīng)用程序 | 用產(chǎn)品表填充dataset,并綁定 datagrid | 70次 | 28% | 72% |
在第一個(gè)測試?yán)铮瑆eb 服務(wù)只是從數(shù)據(jù)庫讀取記錄填充到 dataset,并返回記錄數(shù)(注意不是返回記錄),所占用的系統(tǒng)資源很少,假設(shè)系統(tǒng)資源完全被sqlserver 占用,并且對結(jié)論不會有負(fù)面影響。
在第二個(gè)測試中,web 服務(wù)將 dataset 返回,每秒請求數(shù)就降低了幾乎一半, 這一半的系統(tǒng)資源,被asp.net 用于將 dataset 序列化。
在第三個(gè)測試中,web 應(yīng)用程序?qū)?dataset 綁定到 datagrid,并返回頁面,每秒請求數(shù)幾乎降低了四分之三,這些系統(tǒng)資源被 asp.net 用于將 dataset 綁定到 datagrid,并將頁面序列化。
從以上測試中我們可以看到,datagrid 的綁定和序列化會占用大量的系統(tǒng)資源,如果要提高系統(tǒng)性能,需要通過改善架構(gòu)來實(shí)現(xiàn)。
一、將對數(shù)據(jù)庫的操作,從頁面中分離出來,放到獨(dú)立的持久層。
這樣在客戶端通過 dom 或 xslt 將數(shù)據(jù)展現(xiàn)為表格,來代替服務(wù)器端 datagrid 的綁定工作,大大減輕了服務(wù)器的壓力。并且客戶端通過 ajax 從持久層獲取數(shù)據(jù),會提高用戶的使用體驗(yàn)。
二、將頁面從數(shù)據(jù)中徹底獨(dú)立出來,以便利用緩存。
有的應(yīng)用了 ajax 的頁面還是會讀取初始數(shù)據(jù),這樣的話頁面就不能緩存。這些頁面一般比較復(fù)雜,會比普通頁面占有更多的資源,如果能夠利用緩存,將進(jìn)一步提高系統(tǒng)的性能。
通過以上兩點(diǎn),asp.net 的性能,幾乎能夠提高一倍。
您可以自己作一下測試,或者訪問我們的示例 www.bizstruct.cn。
新聞熱點(diǎn)
疑難解答
圖片精選