今天在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