asp.net应用程序性能的提高方案

 对于一个网站来说,当网站功能全部实现后,性能永远是讨论的热题。那么,性能的指标到底有几条呢?
   一:执行时间
   处理一个请求所需要的时间,通常按服务器向客户端返回第一个字节和最后一个字节之间的时间的计算。执行时间直接影响吞吐量的计算。
   二:响应时间
   是指客户端提出请求后,服务端将第一个字节返回给客户端之间的时间长度。对于客户端端用户来说,这通常是性能中最直观的一个方面。
   三:可伸缩性
   用于衡量应用程序在获取更多资源时更好的执行的能力。
   四:吞吐量
       是指应用程序在单位时间内可以处理的请求数,通常是以每秒请求数衡量。吞吐量可根据应用服务器的客户端线程数而不同。


   当我们知道一个优秀的web网站性能指标后,我们所渴望的便是将自己的网站更加优化,那么我下面介绍几种常见的asp.net应用程序优化方案。


   1、当我们不需要验证用户身份的时候,尽可能的关闭Session。Session的使用会大大降低应用程序的性能。如果我们要禁用页的Session,可以在@Page指令中的EnableSessionState属性设置为False,如果页需要访问会话变量,但不打算创建或修改它们,我们可以将@Page指令中的EnableSessionState属性设置为ReadyOnly。当然如果你够狠的话,禁止整个应用程序的会话状态,可以在配置文件将文件的SessionState配置节中的mode属性设置为off。


  2、尽量使用客户端脚本。作为大都数的asp.net程序员,都不喜欢在前台编写客户端脚本,都喜欢在后台书写代码,一方面是因为后台编写代码远远要舒服的多,二是由于工作量的原因,时间有限,为了完成任务,提高开发效率,就很少在前台编写脚本代码了。因此,虽然我们可能尽量多地使用Web窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用服务器端控件和回发事件处理。通常,只有在检索或存储数据时,我们才应该启动到服务器的往返过程,而多数数据的操作可在这些往返过程间的客户端上进行。也就说说,如果我们所操纵的数据不会传到服务器以将其存储在数据库中,那么,我们就不应该编写导致往返过程的代码。


  3、使用Page.IsPostback避免对往返过程执行不必要的处理。这是因为。Page_Load 事件的代码在执行服务器控件事件之前执行,用通俗的话来讲,我们首次加载该页面执行的是一段A代码,而服务器端控件回发处理的代码并不需要处理该A代码,处理的是B代码,这时候,我们就可以根据该页是否是响应服务器控件事件,使用Page.IsPostBack 属性有条件地执行代码。


  4、在适当的环境中使用ASP.NET 服务器控件,只在必要时保存服务器控件视图状态。自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上重新填充它们的属性值。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能确实会对性能产生影响。您应该知道在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能。默认情况下,为所有服务器控件启用视图状态。若要禁用视图状态,请将控件的EnableViewState 属性设置为false。如果你没有这方面的感受,你可以在页面中查看源码,可以看见一长串的ViewState,有关ViewState的介绍,你可以参考我的另外一篇博文。


  5、不要依赖代码中的异常。所谓代码中的异常,就是传说中的 try { ....} catch { .... } finally { ...}。在没有发生异常的情况下,异常是不会影响应用程序的性能,但一旦发生了异常,那异常大大的降低性能,因此作为专业而优秀的程序员,我们不应该将他们用作控制正常程序流程的方式。如果有可能检测到代码中可能导致异常的状态,请执行这种操作。不要在处理该状态之前捕获异常本身。


  6、适当的使用CLR的垃圾回收器和自动内存管理。小心不要给每个请求分配过多的内存,这样垃圾回收期将必须更加频繁的进行更多的工作,必将影响应用程序效率。


  7、将SQL Server 存储过程用于数据访问。很多时候,我们写一条SQL语句,不如写一个存储过程。因为存储过程是在数据库服务器中直接执行的,而我们写在应用程序的sql语句会现在应用程序中执行,然后才会在数据库服务器中执行,而此时,数据库可不认识这条SQL语句,他会有一个转换的过程,这个过程是会耗费一定的时间的。在.NET Framework 提供的所有数据访问方法中,基于SQL Server 的数据访问是生成高性能、可缩放Web 应用程序的推荐选择。使用托管SQL Server 提供程序时,可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。这就是为什么企业在招聘的时候要求程序员熟悉存储过程的原因啊!


  8、如果可以的话,尽量使用SqlDataReader 类用于快速读取数据。而我们在工作中,却仍然喜欢使SqlDataAdapter,将读取的数据放在DataTable中,因为我们可以将数据完全读取出来,放在内存中,如同一个table,然后我们可以很方便的对这个数据Table进行操作。但这样效率是低下的。SqlDataReader 类提供了一种读取从SQLServer 数据库检索的只进数据流的方法。如果当创建ASP.NET 应用程序时出现允许您使用它的情况,则SqlDataReader 类提供比DataSet 类更高的性能。情况之所以这样,是因为SqlDataReader 使用SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。另外,SqlDataReader 类实现IEnumerable 接口,该接口也允许您将数据绑定到服务器控件。
  9、只要可能,就缓存数据和页输出。使用ASP.NET 缓存机制有两点需要注意。首先,不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次,给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回收工作。
  10、仅对需要的应用程序启用身份验证。默认情况下,身份验证模式为Windows,或集成NTLM。大多数情况下,对于需要身份验证的应用程序,最好在
Machine.config 文件中禁用身份验证,并在Web.config 文件中启用身份验证。

  好了,我的建议也就这么多吧!谢谢各位~~~
  

  

原文地址:https://www.cnblogs.com/xianrongbin/p/2264942.html