自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET中性能和擴(kuò)展性的秘密

開發(fā) 后端
這篇文章中,你可以學(xué)到一些提高你的asp.net網(wǎng)站性能的技巧。

ASP.NET有許多一旦你發(fā)現(xiàn)了就會大幅提高性能和擴(kuò)展性的秘密。比如:在membership和Profile provider 中就有快速實(shí)現(xiàn)驗(yàn)證和授權(quán)的秘密。此外:ASP.NET的http管道可以避免每個請求中的不必要代碼。還不只是這些,ASP.NET的線程可以充分發(fā)揮性能。瀏覽器的頁面片斷緩存機(jī)制(不是服務(wù)器緩存)可以在反復(fù)的訪問中節(jié)約下載時間。在界面加載完成后給你的網(wǎng)站提供快速流暢的體驗(yàn)。最后,CDN和適當(dāng)?shù)氖褂胔ttp緩存頭可以使你的網(wǎng)站訪問飛快。這篇文章中,你可以學(xué)到一些提高你的ASP.NET網(wǎng)站性能的技巧。
我們要討論的問題:
◆管線最佳優(yōu)化
◆ASP.NET過程最佳處理
◆進(jìn)行之前要對ASP.NET做的事情
◆內(nèi)容傳送網(wǎng)絡(luò)
◆在瀏覽器中緩存AJAX請求
◆優(yōu)化緩存機(jī)制
◆優(yōu)化頁面裝載速度提高用戶體驗(yàn)
◆盡可能的優(yōu)化ASP.NET 2.0的profile provider.
◆在不布置網(wǎng)站的情況下如何查詢membership表
◆DOS攻擊
以上技巧可用于任何基于ASP.NET的網(wǎng)站,尤其是使用了membership和profile provider的網(wǎng)站。
1.管線最佳優(yōu)化
一些ASP.NET默認(rèn)的HttpModules 管理請求的管線并且每一個請求。例如:SessionStateModule攔截每一個請求,分析session cookie 來加載HttpContext中的合適的session.但是并不是所有的Modules都是必需的,比如:如果你不用membership的話,就不用配置FormsAuthentication模塊;如果你不用windows身份驗(yàn)證就不用配置WindowsAuthentication,這些模塊只是包含在管線里面,為每一個請求執(zhí)行一些并不是必須的代碼。默認(rèn)的模塊定義在machine.config中($WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG)
如下所示:

 

  1. <httpModules> 
  2.   <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" /> 
  3.   <add name="Session" type="System.Web.SessionState.SessionStateModule" /> 
  4.   <add name="WindowsAuthentication" 
  5.         type="System.Web.Security.WindowsAuthenticationModule" /> 
  6.   <add name="FormsAuthentication" 
  7.         type="System.Web.Security.FormsAuthenticationModule" /> 
  8.   <add name="PassportAuthentication" 
  9.         type="System.Web.Security.PassportAuthenticationModule" /> 
  10.   <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorization
  11. Module" /> 
  12.   <add name="FileAuthorization" type="System.Web.Security.FileAuthorization
  13. Module" /> 
  14.   <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule,  
  15.                              System.Web.Mobile, Version=1.0.5000.0,  
  16.                              Culture=neutralPublicKeyToken=b03f5f7f11d50a3a/> 
  17. httpModules> 

如果你想去掉這些默認(rèn)的設(shè)置,只需要在你的web.config里加入節(jié)點(diǎn)。

 

  1. <httpModules> 
  2.           
  3.          <remove name="Session" /> 
  4.          <remove name="WindowsAuthentication" /> 
  5.          <remove name="PassportAuthentication" /> 
  6.          <remove name="AnonymousIdentification" /> 
  7.          <remove name="UrlAuthorization" /> 
  8.          <remove name="FileAuthorization" /> 
  9. httpModules> 

上面的配置適用于基于數(shù)據(jù)庫的form認(rèn)證并且不需要任何session支持的網(wǎng)站。所以這些節(jié)點(diǎn)可以被刪除。
2.ASP.NET進(jìn)程配置優(yōu)化
asp.net進(jìn)程模型進(jìn)行一些進(jìn)程級別設(shè)置,比如ASP.NET使用多少線程,超時時間,多少請求等待輸入輸出工作的完成等等。默認(rèn)情況下有很多限制。現(xiàn)在硬件越來越便宜,G級內(nèi)存的服務(wù)器普遍存在,所以現(xiàn)在進(jìn)程配置的優(yōu)化可以得到更多的系統(tǒng)資源和擴(kuò)展。
一般情況下,ASP.NET的mashine.config的配置是這樣的:

 

  1. <system.web> 
  2.     <processModel autoConfig="true" />   
  3. system.web> 

你應(yīng)該改變這樣的配置,用一些值設(shè)置不同的屬性來定制ASP.NET線程的工作方式。如下所示:

 

  1. <processModel 
  2.    enable="true" 
  3.    timeout="Infinite" 
  4.    idleTimeout="Infinite" 
  5.    shutdownTimeout="00:00:05" 
  6.    requestLimit="Infinite" 
  7.    requestQueueLimit="5000" 
  8.    restartQueueLimit="10" 
  9.    memoryLimit="60" 
  10.    webGarden="false" 
  11.    cpuMask="0xffffffff" 
  12.    userName="machine" 
  13.    password="AutoGenerate" 
  14.    logLevel="Errors" 
  15.    clientConnectedCheck="00:00:05" 
  16.    comAuthenticationLevel="Connect" 
  17.    comImpersonationLevel="Impersonate" 
  18.    responseDeadlockInterval="00:03:00" 
  19.    responseRestartDeadlockInterval="00:03:00" 
  20.    autoConfig="false" 
  21.    maxWorkerThreads="100" 
  22.    maxIoThreads="100" 
  23.    minWorkerThreads="40" 
  24.    minIoThreads="30" 
  25.    serverErrorMessageFile="" 
  26.    pingFrequency="Infinite" 
  27.    pingTimeout="Infinite" 
  28.    asyncOption="20" 
  29.    maxAppDomains="2000" 
  30. /> 

 

除了下面的值外都是一些默認(rèn)值:
maxWorkerThreads:默認(rèn)每個進(jìn)程是20個線程。在雙核的服務(wù)器上,系統(tǒng)會分配40個線程給ASP.NET,這就意味著ASP.NET在雙核服務(wù)器上同時可以處理40個并發(fā)請求。為了給ASP.NET的每個進(jìn)程增加線程,我曾經(jīng)設(shè)置過100.如果你的應(yīng)用的CPU強(qiáng)勁而且有更多的請求需要,你可以設(shè)置這個屬性。特別是你的網(wǎng)絡(luò)就用使用了大量的webservice或者上傳/下載大量數(shù)據(jù)這些不會把壓力轉(zhuǎn)到CPU上的時候。當(dāng)ASP.NET用完了所有的線程,它會停止接收更多的響應(yīng)。請求會排成隊(duì)列等待直到其它工作中的線程被釋放。這種情況經(jīng)常發(fā)生在網(wǎng)站接收到超出預(yù)期的點(diǎn)擊的時候,這種情況下,如果你有備用的CPU,請?jiān)黾舆M(jìn)程的線程數(shù)量。
maxIOThreads:默認(rèn)是20個。雙核服務(wù)器中系統(tǒng)會提供40個I/O線程給ASP.NET.I/O請求可以用于網(wǎng)站的文件讀寫,數(shù)據(jù)庫讀取,webservice調(diào)用,http請求等等。你可以把它設(shè)置的更高一點(diǎn),特別是在你的網(wǎng)站做并發(fā)的上傳/下載和 webservice調(diào)用的時候。
minWorkerThreads:當(dāng)ASP.NET自由工作線程低于這個值時,ASP.NET會推送一些請求進(jìn)入隊(duì)列。所以你可以設(shè)置一個低值來增加當(dāng)前的請求數(shù)量。當(dāng)然這個值不能設(shè)置的太低,因?yàn)榫W(wǎng)站要做一些后臺處理和并行處理,這些工作都是需要一些線程來運(yùn)行的。
minIOThreads:和minWorkerThreads相當(dāng),只不過是針對I/O進(jìn)程進(jìn)行的設(shè)置。它可以設(shè)置的比in case of 低,因?yàn)镮/O并行處理線程沒有什么問題。
memoryLimit:指定最大的內(nèi)存使用大小。它指定的是占所有系統(tǒng)內(nèi)存的百分比,是指定系統(tǒng)處理進(jìn)程時可以使用的最大內(nèi)存數(shù)。如果服務(wù)器上只有你自己的網(wǎng)站而且沒有其它的使用內(nèi)存的進(jìn)程,你可以把它設(shè)置的高一些,比如:80.如果你的網(wǎng)站存在內(nèi)存泄露問題,你最好把這個值設(shè)置的低一點(diǎn),這樣泄露的內(nèi)存不久就會釋放出來,這樣會保持網(wǎng)站的正常運(yùn)行。特別是你在使用COM組件造成內(nèi)存泄露的時候。當(dāng)然這只是個臨時方案,最終你還是要解決這個內(nèi)存泄露的問題。
除了processModel之外,ASP.NET還可以設(shè)置單一IP最大的請求數(shù)量:

 

 

  1. <system.net> 
  2.   <connectionManagement> 
  3.     <add address="*" maxconnection="100" /> 
  4.   connectionManagement> 
  5. system.net> 

默認(rèn)是2,這個值太低了。這意味著每一個IP最多只能有兩個請求到你的網(wǎng)站,這樣會造成請求擁堵。這里設(shè)置成了100,當(dāng)然有必要的話,你可以設(shè)置得更高。

 

編輯推薦】

  1. 淺談ASP.NET中ViewState與ViewData的區(qū)別
  2. ASP.NET 3.5圖表控件親密接觸
  3. 自己動手實(shí)現(xiàn)Asp.net的MVC框架
  4. ASP.NET MVC應(yīng)用程序的本地化、單元測試和AJAX應(yīng)用
  5. ASP.NET中防止用戶多次登錄的方法
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2017-01-05 19:29:10

公共云云存儲微軟

2023-10-11 13:46:26

緩存Web應(yīng)用程序

2018-04-10 14:38:10

區(qū)塊鏈

2009-11-30 17:47:24

2021-12-09 05:36:16

云存儲可擴(kuò)展性數(shù)據(jù)存儲云存儲

2012-12-24 09:23:27

ASP.NETC#IIS

2011-03-01 11:31:38

SOA甲骨文

2021-09-02 09:42:11

測試軟件可擴(kuò)展性開發(fā)

2011-09-20 09:34:09

Windows Ser微軟虛擬化

2010-07-21 11:21:05

SQL Server

2010-06-30 17:15:39

向外擴(kuò)展SQL Ser

2010-07-01 11:38:13

向外擴(kuò)展 SQL Se

2009-09-03 17:18:40

C#擴(kuò)展性對象模型

2015-05-13 17:15:01

Elasticsear分布式搜索插件

2011-10-14 10:37:54

ASP.NET

2009-07-24 16:15:00

擴(kuò)展ASP.NET G

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-29 16:08:07

ASP和ASP.NET

2022-09-05 15:17:34

區(qū)塊鏈比特幣可擴(kuò)展性

2009-09-03 17:33:08

C#常規(guī)擴(kuò)展性模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號