溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET管道與進程怎么優化

發布時間:2021-12-06 15:03:39 來源:億速云 閱讀:193 作者:iii 欄目:編程語言

這篇文章主要講解了“ASP.NET管道與進程怎么優化”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ASP.NET管道與進程怎么優化”吧!

ASP.NET 2.0中包涵了很多秘密,當你發現它時,可以為你的程序帶來更大的性能和擴展性提升。例如,了解了在Membership和Profile provider提供程序中所隱藏的秘密瓶頸后就可以方便地的解決驗證問題并使得授權操作的速度加快。

另外,ASP.NET HTTP管道為了避免針對每次請求所要執行的必要代碼而發生阻塞。不僅那樣,ASP.NET工作者進程能夠推動其限制而獲得更高的性能。頁面碎片在瀏覽器端的輸出緩存(不是在服務器端)可以顯著節約回訪者的下載時間。按需求的用戶界面下載可以讓你的站點給人快速流暢的感覺。

***內容傳輸網絡和HTTP緩存頭的恰當使用可以讓你的網站驚人的快速。在這篇文章中,你將學習到這些技術,它能夠使你的ASP.NET應用程序獲得更高的性能、更好的擴展性 ,并且可以在任何ASP.NET的網站上實現,尤其是那些應用了ASP.NET 2.0 Membership 和Profile provider的站點。

ASP.NET管道優化

位于請求管道中的很多ASP.NET默認的HttpModules用于攔截客戶端所發出的每個請求。例如,SessionStateModule攔截每個請求,并解析對應的會話cookie,然后在HttpContext中加載適當的會話。實時證明,并不是所有的modules都是必要的。

例如,如果你不使用Membership和Profile provider提供程序,那么你就可以不需要FormsAuthentication module。如果你需要為你的用戶使用Windows驗證,那么你就可以不需要WindowsAuthentication。位于管道中的這些modules僅僅在每次請求到來時執行一些不必要的代碼。

默認的modules都定義在了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" />
</httpModules>

你可以通過在站點的web.config文件中添加<remove>節點到你的網站應用程序中來刪除這些默認的modules。例如:

<httpModules>
<!-- Remove unnecessary Http Modules for faster pipeline -->
<remove name="Session" />
<remove name="WindowsAuthentication" />
<remove name="PassportAuthentication" />
<remove name="AnonymousIdentification" />
<remove name="UrlAuthorization" />
<remove name="FileAuthorization" />
</httpModules>

上面的配置對于使用了數據庫并基于Forms驗證的網站來說非常適合,它們并不需要任何會話的支持。因此,所有這些modules都可以安全的刪除。

ASP.NET 進程配置優化

ASP.NET進程模型配置定義了一些進程級別的屬性,像ASP.NET使用的線程數量、超時前阻止線程花費了多長時間、多少請求在繼續等待IO工作完成等等。默認情況下,很多方面都具有太多的限制。當今,硬件已經變得十分便宜了,即使是采用雙核多GB的RAM服務器也變得非常平常的選擇了。

因此,進程模型配置能夠減少ASP.NET進程消耗更多的系統資源并提供為每臺服務器提供更好的擴展性。

執行一次規則的ASP.NET安裝將會在machine.config文件中創建如下配置的節點:

<system.web>
<processModel autoConfig="true" />

你需要減少這種自動配置并針對不同的特性使用一些特定的值以便自定義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,在一臺雙核的計算機上,ASP.NET的處理就需要40了。這意味著ASP.NET在一臺并行的雙核服務器上可以每次處理40個請求。我將數量增加到100以便為ASP.NET的每次處理提供更多的線程。如果你有一個應用程序,它的CPU處理能力并不是很強但是它卻能夠每秒更容易地處理多個請求,那么你就可以增加這個值。

尤其是你的Web應用程序使用了大量的Web服務調用或者下載/上傳了很多不會對CPU產生壓力的數據時。當ASP.NET用完這些工作者線程時,它會停止出來發來的多個請求。此時請求會放置到一個隊列中并持續等待直到出現一個空閑的工作者線程。通常到你的站點開始接受超過預期的點擊時會發生這樣的情況。那樣的話,如果你需要節省CPU的使用,可以增加每次處理的工作者線程數來達到目的。

maxIOThreads   

每次處理默認為20,在一臺雙核的計算機上,ASP.NET進行的I/O操作就需要40個線程了。這意味著ASP.NET在一臺并行的雙核服務器上可以每次處理40個I/O請求。I/O請求能夠進行的文件讀/寫、數據庫操作、web服務調用、從Web 應用程序中產生的HTTP請求等等。因此,如果你的服務器有足夠的系統資源來處理更多的I/O請求,你可以將該值設置為100。特別是當你的Web應用程序在并行模式下進行下載/上傳數據、調用很多外部Web服務時,非常有用。

minWorkerThreads

當空閑的ASP.NET工作者線程數量低于這個數字時,ASP.NET就會開始將這些發來的請求推入隊列中。因此,你可以為改值設定一個較低的值以便可以增加當前請求的數量。此外,建議不要將該值設置得過低,因為Web應用程序的代碼可能需要做一些后臺處理和并行處理,此時會需要更多的空閑工作者線程支持。

minIOThreads

除了它是針對I/O線程以外,其它與minWorkerThreads的方式相同。然而你可以將該值設置得比minWorkerThreads還低。因為就I/O線程而言,這里不會發生并行處理的問題。

memoryLimit

指定內存大小所允許的***值,作為整個系統內存的百分比,以便ASP.NET在啟動一個新的進程并重新分派存在的請求之前這些工作者進程能夠進行消費。如果在你的服務器上僅僅只運行了你的網站應用程序,而且沒有其它的進程需要RAM,你可以設置一個更高的值,比如80。

然而,如果你同時有一個會發生內存泄漏的應用程序,那么***是把該值設置為一個較低的值以便在出現大問題之前泄漏的內存能得到及時的回收從而保持你的站點穩定。尤其是當你使用COM組件并發生內存泄漏時。然而,這只是針對該問題的一個臨時解決方案;當然需要你去解決泄漏問題。

除了processModel以外,另外還有一個非常重要的節點system.net,你能夠指定發出請求作為單獨IP的***數量。

<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>

默認值為2,設置得比較低。這就意味著你不能從你的Web應用程序用一個IP地址同時鏈接多于2個的鏈接。站點獲得外部內容很多都是由于默認設置而遭到阻塞。這里我將其設置為100。如果你的Web應用程序會對某一個指定的服務器進行大量的調用,你甚至可以考慮設置一個更高的值。

感謝各位的閱讀,以上就是“ASP.NET管道與進程怎么優化”的內容了,經過本文的學習后,相信大家對ASP.NET管道與進程怎么優化這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女