文章来源:Internet

网站的性能对于ASP.NET程序开发人员来说非常重要。一个优秀的网站虽然有美观的页面设计,完善的服务功能,但是打开网页时有长时间的延迟,用户最终将会无法忍受。尤其对于大型的电子商务网站而言,每秒钟有数万用户同时访问,没有良好的网站性能,根本无法满足庞大的需求。

ASP.NET作为全新一代的动态网页生成系统,它在平台性能方面与原有的ASP相比已有了一个本质的提高。但要在此基础上开发出专业水准的、符合生产标准的、受用户欢迎的web应用程序,还需要开发人员从编程的角度在页面、数据访问和字符串处理等各方面进行优化处理,以提高网站的总体性能。

本文将主要探讨在ASP.NET中与此相关的几种进行性能优化的方法及注意问题。

页面性能优化

1、会话状态的恰当选择

HTTP协议是一种无状态的通信协议,无法记录和识别来自不同客户端的请求,但在实际应用中系统却要维护来自客户端的不同请求之间的会话状态信息。ASP.NET通过将会话状态信息存储在进程、状态服务器或SQL Server数据库中来解决这个问题。

将会话状态信息保存在WEB服务器的内存中具有最佳的性能,速度很快,但是却缺乏会话状态信息跨越多个服务器的能力。若要在多个WEB服务器之间维护会话信息,可以使用状态服务器进行存储,这种方式由于可以将应用程序部署到多台服务器上而提高了系统的伸缩性和可靠性,但是以降低性能为代价。对于极其重要的会话信息,需要使用SQL Server存储方式,从而避免丢失重要的会话信息,但由此产生的工作负载比前两者大得多。

若不考虑状态信息的保留和多个服务器共享,应尽量选择保存在服务器的进程中,从而得到最佳的性能。

会话状态信息的存储方式选择通过web.config文件:

<sessionState
mode="InProc/StateServer/SqlServer" //存储方式由此行选择
stateConnectionString="tcpip=127.0.0.1:42424"
……
timeout="20"/>

  2、服务器控件的优化选择

  2.1 减少不必要的服务器控件

  服务器控件带来的方便和功能是html控件所不能比拟的。但是每一个服务器控件都需要在服务器端创建相应的对象,是以牺牲服务器端的资源为代价的,过多的使用服务器控件会极大的影响程序性能。

  很多情况下,简单地使用html标记或数据绑定即能够实现所需功能。比如<asp:Label>控件,若使用它来显示静态信息,则完全可用简单的标记来实现。如果html控件达不到所要实现的功能,而且在脚本语言如javascript、vbscript也不能实现的情况下,才考虑选择服务器控件。

  2.2 禁用不必要的状态视图

  服务器控件的状态视图属性能够自动的在页面往返过程中维护服务器控件的状态,减少开发者的工作量,但是需要占用大量的服务器内存资源。因此,在不需要服务器控件状态视图的情况下,应将其EnableViewState属性设置为false,如常用的<asp:Lable>和<asp:Button>控件。

  2.3 Page.IsPostBack的运用

  Page.IsPostBack用于记录页面是否从客户端返回,若为false表示初次运行,否则表示从客户端再次返回该页面。Page.IsPostBack的合理应用可以避免页面在往返过程中的一些不必要的操作。在Page_Load函数及一些只需要初始化一次的事件函数中均可以使用该属性来提高应用程序性能。

void Page_Load(Object o, EventArgs e)
{
 if(! Page.IsPostBack)
 {
  conn=new SqlConnection("server=localhost;uid=sa;pwd=;database=data");
  String sql="select * from student";
  cmd.Fill(ds,"stu");
  mydataGrid.DataBind();
 }
}

  以上代码将保证只有在首次访问该页面时对数据库进行读取并绑定。

  2.4 合理使用DataGrid控件

  DataGrid控件带有最强大的数据显示功能,还内置了对数据的修改、删除、添加、分页等很多功能。如果只需简单的显示数据, DataGrid并非最佳选择。DataGrid控件的分页功能,数据的存储方式(存储在viewstate中)等,虽然让程序开发者使用方便快捷,但由此产生的性能开销不容小视。

  DataList控件比DataGrid功能少了很多。但自定义性强了很多。特有的多行数据显示还是比较方便的。DataGrid能实现的功能,它基本能实现。

  Repeater控件功能最少,但自定义性非常强。由于减少了很多功能,对服务器的性能带来消耗最小。

  因此,在只需简单显示数据列表时,选择Repeater或DataList控件同样可以达到目的,而且减轻了性能上的开销。

  数据库访问性能优化

  1、数据库的连接和关闭

  访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。

  连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。

  2、使用存储过程

  存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。

  另外,存储过程在服务器端运行,独立于ASP.NET程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。

  3、优化查询语句

  ASP.NET中ADO连接消耗的资源相当大,SQL语句运行的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句,充分利用索引等。

  字符串操作性能优化

  1、使用值类型的ToString方法

  在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。

  使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。

  2、运用StringBuilder类

  String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。

  在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果。

  其定义及操作语句如下所示:

int num;
System.Text.StringBuilder str=new System.Text.StringBuilder(); //创建字符串
str.Append(num.ToString()); //添加数值num
Response.Write(str.ToString); //显示操作结果

  ASP.NET应用程序性能测试

  在对ASP.NET应用程序进行性能测试之前,应确保应用程序没有错误,而且功能正确。具体的性能测试可以采用以下工具进行:
Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具,可以从http://webtool.rte.microsoft.com/上下载。它可以模拟成百上千个用户同时对web

[转载]优化ASP.NET应用程序性能研究与探讨相关推荐

  1. 优化ASP.NET应用程序性能研究与探讨

    http://tech.sina.com.cn/s/2005-02-24/0921534105.shtml http://msdn.microsoft.com/msdnmag/issues/05/01 ...

  2. Asp.net性能优化-提高ASP.Net应用程序性能的十大方法

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...

  3. 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分

    2019独角兽企业重金招聘Python工程师标准>>> [编者按]本文出自站外作者 Brij Bhushan Mishra ,Brij 是微软 MVP-ASP.NET/IIS.C# ...

  4. 【转载】ASP.NET应用程序与页面生命周期

    在本文中,我们将了解不同的事件,ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点,直至将请求结果返回至浏览器结束.在这个过程 ...

  5. [转载]保护 ASP.NET 应用程序的安全

    查看全部的安全性指导主题 Microsoft Corporation 本单元概要 保护 ASP.NET Web 应用程序依赖于完全受到保护的网络.主机和平台基础结构.如果果真如此,攻击者将试图利用 W ...

  6. 提高ASP.NET应用程序性能的几招方法

    以下经验总结自,并且经过验证 1,不参与POSTBACK机制的控件,不要用服务器控件,尽量用静态HTML标记 2,编译时使用RELEASE配置 3,正式投入应用时,记着将DEBUG设为FALSE 4, ...

  7. xScale应用程序性能的优化策略

    xScale应用程序性能的优化策略 来源:单片机及嵌入式系统应用  作者:东莞理工学院 徐钦桂 何文斌 深圳冠日通信科技有限公司 张杰明 <script src="http://www ...

  8. 微信小程序性能优化方案

    文章目录 微信小程序性能优化方案 提高加载性能 小程序代码包准备(下载代码包) 开发者代码注入 页面渲染优化 提升渲染性能 setData工作原理 优化方法 微信小程序性能优化方案 微信小程序如果想要 ...

  9. C++性能优化(一)——应用程序性能优化简介

    一.程序性能优化简介 1.程序性能优化简介 在计算机发展的早期阶段,硬件资源相对而言是非常昂贵的,CPU运行时间与内存容量给程序开发人员设置了极大限制.因此,早期的程序对运行性能和内存空间占用的要求是 ...

最新文章

  1. ios 应用和电脑共享文件夹_堪比AirDrop,苹果 iPhone与Windows电脑互传文件的三种方式...
  2. 在图数据上做机器学习,应该从哪个点切入?
  3. winform 监听http_Winform HttpListener监听有关问题
  4. Tomcat性能调优-JVM监控与调优
  5. Windows——蓝屏[失败的操作:HardwareProtect_x64.sys]解决方案
  6. PHP随机数:mt_rand更快
  7. 隐式调用 Intent 大全
  8. c++实现卷积码编码和维特比译码_鑫艾勒维特家用别墅电梯:安全至上,无可替代...
  9. Android项目跑不起来,本机的android虚拟机跑不起android小项目
  10. 【Python3网络爬虫开发实战】1.3.3-pyquery的安装
  11. Mysql权限控制-允许用户远程链接
  12. Intel IPP密码库 IPPCP 2018 开发笔记与总结(全)
  13. 苹果计算机怎么显示汉字,苹果的safari浏览器怎样设定成中文显示
  14. 星星之火-47: 5G的八大组网方案
  15. python发送put请求
  16. 教你如何免费下载浏览器上收费的音乐和视频
  17. Linux基础入门 -用户与文件操作
  18. 计算思维运用计算机的例子,计算思维案例及平时成绩讨论题资料.doc
  19. 无线传感器网络技术与应用课后习题部分答案
  20. 在ArcMap中添加经纬网

热门文章

  1. 道格拉斯-普克 Douglas-Peuker(DP算法) python java实现
  2. 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
  3. c++ 调用 ffmpeg 编程
  4. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)
  5. 【数据结构与算法】2.深度优先搜索DFS、广度优先搜索BFS
  6. 《JAVA与模式》之抽象工厂模式
  7. [原译]11个高效的VS调试技巧
  8. LaTeX半小时速成究极进化版(修改版)
  9. 从0开始学习 GitHub 系列之「初识 GitHub」
  10. 计算机视觉Computer Vision的尴尬---by林达华