科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件优化asp.net性能的完全技巧(四)

优化asp.net性能的完全技巧(四)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

22. 避免到服务器的不必要的往返过程   虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。

作者:中国IT实验室 来源:中国IT实验室 2007年8月30日

关键字: ASP.NET 优化

  • 评论
  • 分享微博
  • 分享邮件
22. 避免到服务器的不必要的往返过程

  虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。

  通常,只有在检索或存储数据时,您才需要启动到服务器的往返过程。多数数据操作可在这些往返过程间的客户端上进行。例如,从 HTML 窗体验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以将其存储在数据库中,那么您不应该编写导致往返过程的代码。

  如果您开发自定义服务器控件,请考虑让它们为支持 ECMAScript 的浏览器呈现客户端代码。通过以这种方式使用服务器控件,您可以显著地减少信息被不必要的发送到 Web 服务器的次数。

  使用 Page.IsPostBack 避免对往返过程执行不必要的处理

  如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行其他代码,而不是当用户发送包含在该页中的 HTML 窗体时执行的代码。根据该页是否是响应服务器控件事件生成的,使用 Page.IsPostBack 属性有条件地执行代码。例如,下面的代码演示如何创建数据库连接和命令,该命令在首次请求该页时将数据绑定到 DataGrid 服务器控件。

 void Page_Load(Object sender, EventArgs e)
  {
   // Set up a connection and command here.
   if (!Page.IsPostBack)
   {
   String query = "select * from Authors where FirstName like '%JUSTIN%'";
   myCommand.Fill(ds, "Authors");
   myDataGrid.DataBind();
   }
  }

  由于每次请求时都执行 Page_Load 事件,上述代码检查 IsPostBack 属性是否设置为 false.如果是,则执行代码。如果该属性设置为 true,则不执行代码。

  注意如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上呈现。如果不运行该检查,仍将为 Page_Load 事件和该页上的任何服务器控件事件执行处理。

  23. 当不使用会话状态时禁用它

  并不是所有的应用程序或页都需要针对于具体用户的会话状态,您应该对任何不需要会话状态的应用程序或页禁用会话状态。

  若要禁用页的会话状态,请将 @ Page 指令中的 EnableSessionState 属性设置为 false.例如,<%@ Page EnableSessionState="false" %>.

  注意如果页需要访问会话变量,但不打算创建或修改它们,则将 @ Page 指令中的 EnableSessionState 属性设置为 ReadOnly.

  还可以禁用 XML Web services 方法的会话状态。有关更多信息,请参见使用 ASP.NET 和 XML Web services 客户端创建的 XML Web services.

  若要禁用应用程序的会话状态,请在应用程序 Web.config 文件的 sessionstate 配置节中将 mode 属性设置为 off.例如,<sessionstate mode="off" />.

  24. 仔细选择会话状态提供程序

  ASP.NET 为存储应用程序的会话数据提供了三种不同的方法:进程内会话状态、作为 Windows 服务的进程外会话状态和 sql Server 数据库中的进程外会话状态。每种方法都有自己的优点,但进程内会话状态是迄今为止速度最快的解决方案。如果只在会话状态中存储少量易失数据,则建议您使用进程内提供程序。进程外解决方案主要用于跨多个处理器或多个计算机缩放应用程序,或者用于服务器或进程重新启动时不能丢失数据的情况。有关更多信息,请参见 ASP.NET 状态管理。

  25. 不使用不必要的Server Control

  ASP.net中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失,因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此,非必要,应当少使用Server Control.26. ASP.NET应用程序性能测试

  在对ASP.NET应用程序进行性能测试之前,应确保应用程序没有错误,而且功能正确。具体的性能测试可以采用以下工具进行:

  Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具,可以从http://webtool.rte.microsoft.com/上下载。它可以模拟成百上千个用户同时对web应用程序进行访问请求,在服务器上形成流量负载,从而达到测试的目的,可以生成平均TTFB、平均TTLB等性能汇总报告。

  Application Center Test (ACT) 是一个测试工具,附带于Visual Studio.NET的企业版中,是Microsoft正式支持的web应用程序测试工具。它能够直观地生成图表结果,功能比WAS多,但不具备多个客户机同时测试的能力。

  现在写一个asp.net的web应用程序变得非常的简单, 许多的程序员都不愿花时间去构建一个性能良好的应用程序。本文将要讨论提高web应用程序性能的十大方法。我将不限于只讨论asp.net应用程序的内容,因为它们只是web应用程序的一个子集。本文也不能提供一个完整提高web应用程序性能的指南,因为这需要一本书的篇幅。本文只提供一个提高web应用程序性能的良好的开端。(剩下的只有我们自己慢慢研究了)。

  在工作这外,我经常去攀岩,在每次攀岩之前,我都会重温一下攀岩线路图及看一下前面的成功的攀岩者的建议。因为我们需要它们的成功经验。同样的,当你需要修改某个有性能问题的程序或者是要开发一个高性能的站点时,你也需要学习怎么样写一个高性能的web应用程序。

  我个人的经验主要来源于在微软的ASP.NET组担任程序经理,运行和管理www.asp.net网站,和协助开发Community Server(它是ASP.NET Forums,。Text, 和 nGallery的集成升级版本软件)。我想这些经验能我让来帮助大家。

  你也许会想到把你的应用程序划分成不同的逻辑层。你也可能听过三层物理架构或N层架构,这是最常用的架构模式,它把不同的程序功能物理的分配给各个硬件来执行。这样,如果我们想提高应用程序的性能的话,加一些硬件就可以达到目的了。按理说这种方法能提高应用程序的性能,但是我们应该避免使用这种方法。所以,只要有可能,我们都应该把ASP.NET页面和它用到的组件放到一个应用程序中运行。

  因为分布式的布署,要用到Web Services或者Remoting,它将使应用程序的性能下降20%或者更多。

  对于数据层有点不同,最好还是把它独立出来布署,用一个单独的硬件来运行它。虽然这样,但是数据库仍然是应用程序性能的瓶颈。因此,当你想优化你的程序的时候,首先想到的地方就应该是优化数据层了。

  在修改应用程序的出现性能问题的地方之前,你要先确认出问题的地方的程序看起来很严密,性能分析器对于查找应用程序哪些地方花费了多长时间非常有用。这些地方是我们用直觉感觉不到的。

  本文讨论两种类型的性能优化:一种是大的性能优化(big optimizations),如用ASP.NET的Cache;另一种是小的性能优化(tiny optimizations)。小幅的性能优化有时候非常有用。你只对你的代码作一个小的改到,然后一次调用它一千或一万次。作一次大的性能优化,你会发生你的应用程序的速度会有一个很大的提升。作一次小的性能优化,也许每次请求只能提高一微秒,但是如果每天的请求量很大的话,那么应用程序就有很显著的性能提升。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章