這篇文章主要講解了“ASP.NET管道與進(jìn)程怎么優(yōu)化”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ASP.NET管道與進(jìn)程怎么優(yōu)化”吧!
敦化ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
ASP.NET 2.0中包涵了很多秘密,當(dāng)你發(fā)現(xiàn)它時,可以為你的程序帶來更大的性能和擴(kuò)展性提升。例如,了解了在Membership和Profile provider提供程序中所隱藏的秘密瓶頸后就可以方便地的解決驗證問題并使得授權(quán)操作的速度加快。
另外,ASP.NET HTTP管道為了避免針對每次請求所要執(zhí)行的必要代碼而發(fā)生阻塞。不僅那樣,ASP.NET工作者進(jìn)程能夠推動其限制而獲得更高的性能。頁面碎片在瀏覽器端的輸出緩存(不是在服務(wù)器端)可以顯著節(jié)約回訪者的下載時間。按需求的用戶界面下載可以讓你的站點給人快速流暢的感覺。
***內(nèi)容傳輸網(wǎng)絡(luò)和HTTP緩存頭的恰當(dāng)使用可以讓你的網(wǎng)站驚人的快速。在這篇文章中,你將學(xué)習(xí)到這些技術(shù),它能夠使你的ASP.NET應(yīng)用程序獲得更高的性能、更好的擴(kuò)展性 ,并且可以在任何ASP.NET的網(wǎng)站上實現(xiàn),尤其是那些應(yīng)用了ASP.NET 2.0 Membership 和Profile provider的站點。
ASP.NET管道優(yōu)化
位于請求管道中的很多ASP.NET默認(rèn)的HttpModules用于攔截客戶端所發(fā)出的每個請求。例如,SessionStateModule攔截每個請求,并解析對應(yīng)的會話cookie,然后在HttpContext中加載適當(dāng)?shù)臅?。實時證明,并不是所有的modules都是必要的。
例如,如果你不使用Membership和Profile provider提供程序,那么你就可以不需要FormsAuthentication module。如果你需要為你的用戶使用Windows驗證,那么你就可以不需要WindowsAuthentication。位于管道中的這些modules僅僅在每次請求到來時執(zhí)行一些不必要的代碼。
默認(rèn)的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>節(jié)點到你的網(wǎng)站應(yīng)用程序中來刪除這些默認(rèn)的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> |
上面的配置對于使用了數(shù)據(jù)庫并基于Forms驗證的網(wǎng)站來說非常適合,它們并不需要任何會話的支持。因此,所有這些modules都可以安全的刪除。
ASP.NET 進(jìn)程配置優(yōu)化
ASP.NET進(jìn)程模型配置定義了一些進(jìn)程級別的屬性,像ASP.NET使用的線程數(shù)量、超時前阻止線程花費了多長時間、多少請求在繼續(xù)等待IO工作完成等等。默認(rèn)情況下,很多方面都具有太多的限制。當(dāng)今,硬件已經(jīng)變得十分便宜了,即使是采用雙核多GB的RAM服務(wù)器也變得非常平常的選擇了。
因此,進(jìn)程模型配置能夠減少ASP.NET進(jìn)程消耗更多的系統(tǒng)資源并提供為每臺服務(wù)器提供更好的擴(kuò)展性。
執(zhí)行一次規(guī)則的ASP.NET安裝將會在machine.config文件中創(chuàng)建如下配置的節(jié)點:
<system.web> <processModel autoConfig="true" /> |
你需要減少這種自動配置并針對不同的特性使用一些特定的值以便自定義ASP.NET工作者進(jìn)程的工作方式。例如:
<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" />
除了下面幾個不為默認(rèn)值以外,其余均為系統(tǒng)默認(rèn)值:
maxWorkerThreads
每次處理默認(rèn)為20,在一臺雙核的計算機上,ASP.NET的處理就需要40了。這意味著ASP.NET在一臺并行的雙核服務(wù)器上可以每次處理40個請求。我將數(shù)量增加到100以便為ASP.NET的每次處理提供更多的線程。如果你有一個應(yīng)用程序,它的CPU處理能力并不是很強但是它卻能夠每秒更容易地處理多個請求,那么你就可以增加這個值。
尤其是你的Web應(yīng)用程序使用了大量的Web服務(wù)調(diào)用或者下載/上傳了很多不會對CPU產(chǎn)生壓力的數(shù)據(jù)時。當(dāng)ASP.NET用完這些工作者線程時,它會停止出來發(fā)來的多個請求。此時請求會放置到一個隊列中并持續(xù)等待直到出現(xiàn)一個空閑的工作者線程。通常到你的站點開始接受超過預(yù)期的點擊時會發(fā)生這樣的情況。那樣的話,如果你需要節(jié)省CPU的使用,可以增加每次處理的工作者線程數(shù)來達(dá)到目的。
maxIOThreads
每次處理默認(rèn)為20,在一臺雙核的計算機上,ASP.NET進(jìn)行的I/O操作就需要40個線程了。這意味著ASP.NET在一臺并行的雙核服務(wù)器上可以每次處理40個I/O請求。I/O請求能夠進(jìn)行的文件讀/寫、數(shù)據(jù)庫操作、web服務(wù)調(diào)用、從Web 應(yīng)用程序中產(chǎn)生的HTTP請求等等。因此,如果你的服務(wù)器有足夠的系統(tǒng)資源來處理更多的I/O請求,你可以將該值設(shè)置為100。特別是當(dāng)你的Web應(yīng)用程序在并行模式下進(jìn)行下載/上傳數(shù)據(jù)、調(diào)用很多外部Web服務(wù)時,非常有用。
minWorkerThreads
當(dāng)空閑的ASP.NET工作者線程數(shù)量低于這個數(shù)字時,ASP.NET就會開始將這些發(fā)來的請求推入隊列中。因此,你可以為改值設(shè)定一個較低的值以便可以增加當(dāng)前請求的數(shù)量。此外,建議不要將該值設(shè)置得過低,因為Web應(yīng)用程序的代碼可能需要做一些后臺處理和并行處理,此時會需要更多的空閑工作者線程支持。
minIOThreads
除了它是針對I/O線程以外,其它與minWorkerThreads的方式相同。然而你可以將該值設(shè)置得比minWorkerThreads還低。因為就I/O線程而言,這里不會發(fā)生并行處理的問題。
memoryLimit
指定內(nèi)存大小所允許的***值,作為整個系統(tǒng)內(nèi)存的百分比,以便ASP.NET在啟動一個新的進(jìn)程并重新分派存在的請求之前這些工作者進(jìn)程能夠進(jìn)行消費。如果在你的服務(wù)器上僅僅只運行了你的網(wǎng)站應(yīng)用程序,而且沒有其它的進(jìn)程需要RAM,你可以設(shè)置一個更高的值,比如80。
然而,如果你同時有一個會發(fā)生內(nèi)存泄漏的應(yīng)用程序,那么***是把該值設(shè)置為一個較低的值以便在出現(xiàn)大問題之前泄漏的內(nèi)存能得到及時的回收從而保持你的站點穩(wěn)定。尤其是當(dāng)你使用COM組件并發(fā)生內(nèi)存泄漏時。然而,這只是針對該問題的一個臨時解決方案;當(dāng)然需要你去解決泄漏問題。
除了processModel以外,另外還有一個非常重要的節(jié)點system.net,你能夠指定發(fā)出請求作為單獨IP的***數(shù)量。
<system.net> <connectionManagement> <add address="*" maxconnection="100" /> </connectionManagement> </system.net> |
默認(rèn)值為2,設(shè)置得比較低。這就意味著你不能從你的Web應(yīng)用程序用一個IP地址同時鏈接多于2個的鏈接。站點獲得外部內(nèi)容很多都是由于默認(rèn)設(shè)置而遭到阻塞。這里我將其設(shè)置為100。如果你的Web應(yīng)用程序會對某一個指定的服務(wù)器進(jìn)行大量的調(diào)用,你甚至可以考慮設(shè)置一個更高的值。
感謝各位的閱讀,以上就是“ASP.NET管道與進(jìn)程怎么優(yōu)化”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對ASP.NET管道與進(jìn)程怎么優(yōu)化這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
本文標(biāo)題:ASP.NET管道與進(jìn)程怎么優(yōu)化
本文網(wǎng)址:http://chinadenli.net/article18/gicpdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、外貿(mào)建站、微信小程序、用戶體驗、關(guān)鍵詞優(yōu)化、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)