• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

分享ASP.NET中性能和扩展性的秘密

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.Net缓存第一次接触发布时间:2022-07-10
下一篇:
ASP.NETMVC数据传递进阶从数据库拿到数据后的三种方式发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap