分享ASP.NET中效能和擴充性的秘密

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.