ASP.NET有許多一旦你發現了就會大幅提高效能和擴充性的秘密.比如:在membership和Profile provider 中就有快速實現驗證和授權的秘密.此外:ASP.NET的http管道可以避免每個請求中的不必要代碼.還不只是這些,ASP.NET的線程可以充分發揮效能.瀏覽器的頁面片斷緩衝機制(不是伺服器緩衝)可以在反覆的訪問中節約下載時間.在介面載入完成後給你的網站提供快速流暢的體驗.最後,CDN和適當的使用http緩衝頭可以使你的網站訪問飛快.這篇文章中,你可以學到一些提高你的ASP.NET網站效能的技巧.
我們要討論的問題:
◆管線最佳最佳化
◆ASP.NET過程最佳處理
◆進行之前要對ASP.NET做的事情
◆內容傳遞網路
◆在瀏覽器中緩衝AJAX請求
◆最佳化緩衝機制
◆最佳化頁面裝載速度提高使用者體驗
◆儘可能的最佳化ASP.NET 2.0的profile provider.
◆在不布置網站的情況下如何查詢membership表
◆DOS攻擊
以上技巧可用於任何基於ASP.NET的網站,尤其是使用了membership和profile provider的網站.
1.管線最佳最佳化
一些ASP.NET預設的HttpModules 管理請求的管線並且每一個請求.例如:SessionStateModule攔截每一個請求,分析session cookie 來載入HttpContext中的合適的session.但是並不是所有的Modules都是必需的,比如:如果你不用membership的話,就不用配置FormsAuthentication模組;如果你不用windows身分識別驗證就不用配置WindowsAuthentication,這些模組只是包含在管線裡面,為每一個請求執行一些並不是必須的代碼.預設的模組定義在machine.config中($WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG)
如下所示:
<httpModules>
<add name=“OutputCache” type=“System.Web.Caching.OutputCacheModule” />
<add name=“Session” type=“System.Web.SessionState.SessionStateModule” />
<add name=“WindowsAuthentication”
type=“System.Web.Security.WindowsAuthenticationModule” />
<add name=“FormsAuthentication”
type=“System.Web.Security.FormsAuthenticationModule” />
<add name=“PassportAuthentication”
type=“System.Web.Security.PassportAuthenticationModule” />
<add name=“UrlAuthorization” type=“System.Web.Security.UrlAuthorizationModule” />
<add name=“FileAuthorization” type=“System.Web.Security.FileAuthorizationModule” />
<add name=“ErrorHandlerModule” type=“System.Web.Mobile.ErrorHandlerModule,
System.Web.Mobile, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” /> < SPAN>httpModules>
如果你想去掉這些預設的設定,只需要在你的web.config裡加入節點.
<httpModules>
<remove name=“Session” />
<remove name=“WindowsAuthentication” />
<remove name=“PassportAuthentication” />
<remove name=“AnonymousIdentification” />
<remove name=“UrlAuthorization” />
<remove name=“FileAuthorization” /> < SPAN>httpModules>
上面的配置適用於基於資料庫的form認證並且不需要任何session支援的網站.所以這些節點可以被刪除.
2.ASP.NET進程配置最佳化
asp.net進程模型進行一些進程層級設定,比如ASP.NET使用多少線程,逾時時間,多少請求等待輸入輸出工作的完成等等.預設情況下有很多限制.現在硬體越來越便宜,G級記憶體的伺服器普遍存在,所以現在進程配置的最佳化可以得到更多的系統資源和擴充.
一般情況下,ASP.NET的mashine.config的配置是這樣的:
<system.web>
<processModel autoConfig=“true” />
< SPAN>system.web>
你應該改變這樣的配置,用一些值設定不同的屬性來定製ASP.NET線程的工作方式.如下所示:
<processModel
enable=“true”
timeout=“Infinite”
idleTimeout=“Infinite”
shutdownTimeout=“00:00:05”
requestLimit=“Infinite”
requestQueueLimit=“5000”
restartQueueLimit=“10”
memoryLimit=“60”
webGarden=“false”
cpuMask=“0xffffffff”
userName=“machine”
password=“AutoGenerate”
logLevel=“Errors”
clientConnectedCheck=“00:00:05”
comAuthenticationLevel=“Connect”
comImpersonationLevel=“Impersonate”
responseDeadlockInterval=“00:03:00”
responseRestartDeadlockInterval=“00:03:00”
autoConfig=“false”
maxWorkerThreads=“100”
maxIoThreads=“100”
minWorkerThreads=“40”
minIoThreads=“30”
serverErrorMessageFile=“”
pingFrequency=“Infinite”
pingTimeout=“Infinite”
asyncOption=“20”
maxAppDomains=“2000” />
除了下面的值外都是一些預設值:
maxWorkerThreads:預設每個進程是20個線程.在雙核的伺服器上,系統會分配40個線程給ASP.NET,這就意味著ASP.NET在雙核伺服器上同時可以處理40個並發請求.為了給ASP.NET的每個進程增加線程,我曾經設定過100.如果你的應用的CPU強勁而且有更多的請求需要,你可以設定這個屬性.特別是你的網路就用使用了大量的webservice或者上傳/下載大量資料這些不會把壓力轉到CPU上的時候.當ASP.NET用完了所有的線程,它會停止接收更多的響應.請求會排成隊列等待直到其它工作中的線程被釋放.這種情況經常發生在網站接收到超出預期的點擊的時候,這種情況下,如果你有備用的CPU,請增加進程的線程數量.
maxIOThreads:預設是20個.雙核伺服器中系統會提供40個I/O線程給ASP.NET.I/O請求可以用於網站的檔案讀寫,資料庫讀取,webservice調用,http請求等等.你可以把它設定的更高一點,特別是在你的網站做並發的上傳/下載和 webservice調用的時候.
minWorkerThreads:當ASP.NET自由背景工作執行緒低於這個值時,ASP.NET會推送一些請求進入隊列.所以你可以設定一個低值來增加當前的請求數量.當然這個值不能設定的太低,因為網站要做一些幕後處理和平行處理,這些工作都是需要一些線程來啟動並執行.
minIOThreads:和minWorkerThreads相當,只不過是針對I/O進程進行的設定.它可以設定的比in case of 低,因為I/O平行處理線程沒有什麼問題.
memoryLimit:指定最大的記憶體使用量大小.它指定的是占所有系統記憶體的百分比,是指定系統處理進程時可以使用的最大記憶體數.如果伺服器上只有你自己的網站而且沒有其它的使用記憶體的進程,你可以把它設定的高一些,比如:80.如果你的網站存在記憶體泄露問題,你最好把這個值設定的低一點,這樣泄露的記憶體不久就會釋放出來,這樣會保持網站的正常運行.特別是你在使用COM組件造成記憶體泄露的時候.當然這隻是個臨時方案,最終你還是要解決這個記憶體泄露的問題.
除了processModel之外,ASP.NET還可以設定單一IP最大的請求數量:
<system.net>
<connectionManagement>
<add address=“*” maxconnection=“100” />
< SPAN>connectionManagement> < SPAN>system.net>
預設是2,這個值太低了.這意味著每一個IP最多隻能有兩個請求到你的網站,這樣會造成請求擁堵.這裡設定成了100,當然有必要的話,你可以設定得更高.
點擊查看更多相關內容,本文轉載於蝦米站長:http://www.xiamizhan.com