今天在MSN Group裡面和一些朋友談ASP.Net程序的性能優化。
現在來總結一下優化的手段:
1.數據庫優化,包括表結構優化、索引優化、SQL語句優化、存儲過程優化
2.優化VIEwState
3.使用緩存
4.生成靜態頁面(主要針對交互性不是很強的信息發布系統前端)
5.使用前置的IIS/apache來處理對靜態頁面、圖片、JS文件的請求
6.優化算法
7.歡迎大家補充
對於性能調優,幾乎所有專家的建議都是:如果沒有確切的性能測量,就不要進行性能調優。沒有基准性能測試的調優基本上除了讓系統的代碼變的亂七八糟之外不會有其他好處,你費盡心思把一個算法從0.1秒提高到0.01秒得到的效果往往會被一個糟糕的select語句徹底淹沒。
所以,前面的幾種手段不是萬靈藥,要調優,首先要了解系統慢在哪兒。千萬不能病急亂投醫。下面的內容來自我個人的工作經驗,不是所有系統都可以套用的,切記切記!!!!
下面我們來分析一下這四種調優手段:
對於OA/業務管理系統類型應用來說,數據庫優化往往是關鍵點,原因有幾點:
1.對數據庫的CRUD是最這些系統最常見的操作。
2.對數據庫系統的操作往往會引起磁盤I/O(因為數據庫文件和日志都是保存在磁盤的)
3.應用對數據庫系統的操作往往是跨進程的甚至跨機器的。(磁盤I/O+網絡I/O,CPU再快內存再多都鞭長莫及了吧)
所以這些對數據庫的操作往往是整個系統的性能瓶頸。
那麼,知道了這個大方向,如何知道到底是那些SQL或者存儲過程慢呢?這個就需要結合數據庫的Profiler
對於SQL Server可以看看這篇文章
http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx?mfr=true
對於Oracle可以看看這篇文章
http://www.Javaeye.com/post/117389
2,VIEwState,這個咚咚體積比較大,對於internet應用來說,會有一定的影響。關於對它的優化,園子裡面已經有的講了,大家自己搜索一下吧。
3.使用緩存
這個我的看法和MSN Group裡面的幾個朋友不是很一致。MSN Group裡面有個朋友認為緩存可以是一組靜態變量,或者是一個緩存控制器控制的一些變量。我個人認為,這樣的緩存在單服務器環境下也許有不錯的性能,在多服務器環境下,這樣的緩存反而會成為性能瓶頸,因為應用程序或者緩存控制器需要小心的保證多個進程的緩存內容一致。這個過程使得程序的可伸縮性大大降低。考慮一下100台服務器的Web Farm,一個進程中的緩存修改,需要通知並且確認剩下99個服務器都正確的更改了,這是一件多麼可怕的事情。
對於這塊,memcache是一個比較不錯的解決方案,著名的wiki產品mediawiki就使用了它來做緩存服務器。memcache也有.Net的clIEnt api。
4.不是很了解,請高手補充
5.網上很多介紹了,尤其是Java那邊,apache搭配tomcat有很多介紹。自己google下咯。
6.這個優化最復雜,效果也許最不明顯,如果你一定要做,那就八仙過海,各顯神通吧。
http://www.cnblogs.com/ncindy/archive/2006/11/07/553533.Html