文章系统图片系统下载系统个人求职企业招聘房产系统展会系统供求系统产品系统商城系统自定义系统后台一览
解决方案
建站知识
提高ASP.NET网站性能的方法
来源:网络作者:网络

Asp.NET有许多秘密,当你了解了这些秘密后,可以使得你的ASP.NET应用程序达到极大的性能提升。举例来说,在使用Membership和profile进行Authentication和authorization时,可以通过简单的修改Membership和profile以提高Authentication和authorization的性能;ASP.NET Http 管道通过调整以避免执行不必要的HttpModules;不仅如此,浏览器端的页面缓存可以为重复浏览节省大量的下载时间;按需UI加载可以使网站更快、更平滑;最后,t适当的应用CDN(Cotent Delivery Networks)和应用Http Cache Header可以使网站更加快速。下面就让我们来分别讨论这些技巧,以提高我们ASP.NET网站的性能。

1 ASP.NET 管道最优化配置

用户每次请求网站时,都会有许多ASP.NET默认HttpModules去中断请求并进行一些处理,例如SessisonStateModule会中断每次的请求,解析session cookie信息并加载的适当的Session给HttpContent.但是这些默认的HttpModules并不都是必须的,例如如果你没有应用Forms Authentication来进行用户验证,那就不需要FormsAuthentication Module。

默认的Modules是在machine.config文件(该文件的位置为:$WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIGdirectory))定义的,其定义如下:.

<httpModules>
7L9Fv?(cg0<addname="OutputCache"type="System.Web.Caching.OutputCacheModule"/>
Zz(k8MP,g0<addname="Session"type="System.Web.SessionState.SessionStateModule"/>
Ho)Zh h2K0<addname="WindowsAuthentication"ITPUB个人空间]S,j1w;G
type="System.Web.Security.WindowsAuthenticationModule"/>ITPUB个人空间k]eh)p,k6AR Kyk
<addname="FormsAuthentication"
ljRm C q;O8Q0type="System.Web.Security.FormsAuthenticationModule"/>ITPUB个人空间,qS2LR#N2A8\
<addname="PassportAuthentication"ITPUB个人空间(@:? nV.M)tR
type="System.Web.Security.PassportAuthenticationModule"/>ITPUB个人空间3KQ8_-N,]:FB,Z
<addname="UrlAuthorization"type="System.Web.Security.UrlAuthorizationModule"/>ITPUB个人空间Dm\GK?X
<addname="FileAuthorization"type="System.Web.Security.FileAuthorizationModule"/>ITPUB个人空间9rq0Y8LI5e
<addname="ErrorHandlerModule"type="System.Web.Mobile.ErrorHandlerModule,
S*xUCs5Y wX2e0System.Web.Mobile, Version=1.0.5000.0,
f7j hn|]&ea0Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>ITPUB个人空间BTJ}0K
</httpModules>
Kq W$}6R!B&~W0

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }你要以通过在web.config中添加<remove>节点来移除不必要的httpModules,比如如果一个网站使用的是基于数据库的forms authentication验证并且没有使用任何Session则可以在web.config中添加如下节点:

 

<httpModules>
ld L]3?9s T nkv*o0<!-- Remove unnecessary Http Modules for faster pipeline -->
)q?};n'b"vT0<removename="Session"/>ITPUB个人空间-Z(o5E!r Y
<removename="WindowsAuthentication"/>ITPUB个人空间aDS} t!|G)n{m,i
<removename="PassportAuthentication"/>ITPUB个人空间$x8~2Viz0V*z,q
<removename="AnonymousIdentification"/>
k {2Mr{rn'Y-|0<removename="UrlAuthorization"/>
5c5yJ\4em qZS0<removename="FileAuthorization"/>ITPUB个人空间'fnf0h T`8~(jj
</httpModules>ITPUB个人空间d)k5J5w,XO1v ML o

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }2 ASP.NET进程最优化配置

 

ASP.NET进程模块配置了许多进程级别的属性,比如Asp.NET可以使用多少线程;超时多长时间后阻塞一个线程;在IO线程完成工作时,应该由多少个请求保持等待。默认的配置有许多限制,但是现在硬件变得越来越便宜,双核处理和GB的内存变成了标准配置,所以我们要以调整默认配置,让Asp.net进程使用更多的系统资源。

  默认情况下,mechine.config文件中是这样配置asp.net进程的。

<system.web>
T*{$]9l8P4K ].U/g0I0
~4gncb0<processModelautoConfig="true"/>ITPUB个人空间r ^&hq&y@q

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

我们可以调整默认配置,为每个属性指定不同的值,以定制asp.net线程的工作模型,例如:

<processModelITPUB个人空间$JAS%]	x7E8gd
ITPUB个人空间0wd2t7T gpHpx
enable="true"
`6ZOFF|8tU0
[.K};Q1iH0timeout="Infinite"
NE)xm4\(L/u0ITPUB个人空间w,Y*KC;D;B
idleTimeout="Infinite"
(Kic,P GB$dN6J0
U,OB|5v| F}0shutdownTimeout="00:00:05"ITPUB个人空间.X[o;Y Sz4Es'w
ITPUB个人空间QnIJ%~A
requestLimit="Infinite"
g6eaMp+|8i0ITPUB个人空间Ct |Ysr
requestQueueLimit="5000"
*WW`:s SQ0ITPUB个人空间eD^-{`['Y(Rn
restartQueueLimit="10"
'w*G[3E~p)RRD4\6s}0ITPUB个人空间!\v}n,X*\L+a
memoryLimit="60"
%~Hsk2l!}-L0
&jI4wB"j!R \B"L0webGarden="false"ITPUB个人空间Ed:L l'p

Ry~P_ Klaz eAM0cpuMask="0xffffffff"ITPUB个人空间+oH1FExs w:j
ITPUB个人空间&ewf\:R
userName="machine"ITPUB个人空间H5ZQTh1f
ITPUB个人空间Pgg9Ni [!n)S
password="AutoGenerate"ITPUB个人空间Lel&c&W!s;z
ITPUB个人空间:x'r Cr;`[.`m
logLevel="Errors"ITPUB个人空间nmM,G/z'q

A{]#^9S0clientConnectedCheck="00:00:05"
,By w,|CW3q0
3q8_\:eu;~/RNq0comAuthenticationLevel="Connect"
B7p+@ H1Y-T I0
1r-A au8EO(aj0comImpersonationLevel="Impersonate"
On%tFG*C,`'U7xG0
*o|5mRBY)S0responseDeadlockInterval="00:03:00"ITPUB个人空间[.v2p(wq"jj
ITPUB个人空间 A"wy*vvbE:I
responseRestartDeadlockInterval="00:03:00"ITPUB个人空间7a*f)V^(V!m^
ITPUB个人空间[4PH*nA8P]
autoConfig="false"
yyQQ|6w0
z0z$PK5p`0maxWorkerThreads="100"ITPUB个人空间\w+wHZ'x+X*~W
ITPUB个人空间xe li8l7Vj
maxIoThreads="100"ITPUB个人空间Y/Kt/z'B1JV
ITPUB个人空间Eo$hvboG l
minWorkerThreads="40"
K&R;qyG%l)uz1J0ITPUB个人空间 QYd E-lc:Q
minIoThreads="30"
g]J)R;]:U;n0ITPUB个人空间m(Xe8_2D
serverErrorMessageFile=""
Z3GNrS:bV0ITPUB个人空间j I oZ2q_
pingFrequency="Infinite"ITPUB个人空间PQ])S.AD*j5uW}

MV#E B#t?0pingTimeout="Infinite"ITPUB个人空间4H:LL8zG+v*H
ITPUB个人空间[?'QT/?wR|
asyncOption="20"
Z.Ock5x-T4^0
]V 提高ASP.NET网站性能的方法-建站知识-成都网站建设|郫县网页制作|微信开发|微信商城-中原动力

上面的属性基本上都是使用的默认值,除了下面的几个:

  • maxWorkerThreads :maxWorkerThreads的默认值是20/进程。在一个双核处理器的服务器中,会有40个线程分配给asp.net,这意味着双核服务器的asp.net在同一时间只能并行处理40个请求,为了分配给asp.net更多的线程,我把maxWorkerThreads的值改为100。特别需要注意的是,如果asp.net用完了线程,这时如果有新的请求进来,asp.net会将新来的请求放到等待队列,直到有线程释放为止,所以如果你的应用调用了许多web service或是有许多i/o操作,并且这些操作不会占用太多的cpu资源的话,你完全可以增大maxWorkerThreads的值。
  • maxIOThreads :maxIOThreads的默认值也是20/process,在一个双核处理器上,同样也有40个线程分配给asp.net来进行I/O操作,这也意味着在一个双核处理器上,同一时间asp.net只能并行处理40个I/O请求。这里我们说的I/O请求可以是文件读写、数据库操作、web service调用等。所以如果你的应用程序服务器有足够的资源来并行处理这些操作,你完全可以将maxIOThreads的值设的大一些,比如100.
  • minWorkerThreads :minWorkerThreads的默认值为1,它指出了分配给asp.net的最少辅助线程数。
  • minIOThreads : minWorkerThreads的默认值为1,它指出了分配给asp.net的最少I/O辅助线程数。
  • memoryLimit:以百分比的形式指定在 ASP.NET 启动新进程和重新分配现有请求前,辅助进程可以使用的最大内存大小。memoryLimit的默认值是60,如果你的服务器上只有你自己的应用程序,并且没有别的消耗内存的服务,那么你完全可以将memoryLimit设的大一些,比如80。

除了processModel之外,还有另外一个重要的节点要以配置,就是你可以在System.Net节点配置对一个IP所允许的最大并发请求数:

<system.net>
E!fB$x&p.]E,v L0
'MJDhS0<connectionManagement>ITPUB个人空间 e@&{q3Z5F

2[5ox-lv#r0<addaddress="*"maxconnection="100"/>
1T$MO0grZY,P,b0
7Ru|1P{Z1y~;S0S0</connectionManagement>
.eXkvSK0
D;f)a8uSX'U"TYgM0</system.net>
&L/\LkX3@7@'B0

.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }maxconnection的默认值是2,这意味着你不能在你的应用程序里同时对一个IP进行多于2个的请求。所以如果你的应用对一个特定的服务器进行了许多调用,你完全可以将maxconnection的值设的大一点,例如我在这里设为100。