摘要:
开发一个对用户的请求做出很快回应的应用程序是每个开发者的目标和挑战!ASP.NET是为速度优化和性能改进而设计的,它的改进体现在在服务端的页编译和自动存储。然而,当你的应用程序在同一时间内执行大量的请求时,这项改进仍然无法防止性能的降低。
为了写一个高性能的应用程序,你必需平衡通常影响性能的四个方面. 表现如下:
执行时间:执行一个请求所花的时间,从接收到第一个字节算起到接收到最后一个字节所花的时间。
响应时间:从发送请求到服务器响应接收到第一个字节所花的时间。
伸缩性:这个主要表现在服务器分配给应用程序的资源(内存,CPU或电脑)。
吞吐量:在一个单位时间内(通常是1秒)能够处理请求的数量。
以下是能够让你开发出一个高性能应用程序的几个方面:
状态管理,
数据存储,
页面和服务器控件,
网页应用程序,
代码实践。
我们先从前面两个方面来展开说明,在下一篇文章中将涵概后面三个方面的内容,以及缓存技术将在缓存优化的文章里详细讲解。
状态管理:
以下列出的一些建议指出怎样更有效的执行状态管理:
SessionState 语句:
当你不用Session时请关闭Session状态,并不是所有的网站都会保存每个用户Session状态。当你禁用不必要的Session状态时你的网站性能将会有所提高。在网页中禁Session状态请用下面的代码:
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
如果你的页面只要求读取Session的值,你可以将其设为只读。如果要禁用整个网站的Session会话可以打开Web.config文件,将SessionState节点的mode属性设置为false,代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
Session State Provider
不只一个存储Session状态数据的方式,你可以从Web.config文件中的SessionState节点的Mode属性中设置你所喜欢的方式来存储其数据。它所支持的存储方式包括:in-process模式,state server模式,Sql server模式以及自定义模式。每一种模式在选定的环境下都有其自身的优势。in-process模式是至今最快的一种模式,如果你想用Session来存储一些小而且经常变动的数据,这种模式是你理想的选择。如果你想在重起你的服务器后仍然维持你的Session状态,state server模式和SQL Server模式是不错的选择。
数据存储:
以下几点指出怎么更有效的进行数据存储:
应用 SQL server provider
Sql server provider能够开发更高效的网站应用程序以及更好的扩展性。
应用SQL DATA READER
SqlDataReader类在整个运行过程中只检索中一次数据,因此在条件允许的情况下应用 SqlDataReader类来替代 DataSet,DataTable等,这样能给你的应用程序带来更高的性能。
应用存储过程
尽可能的用存储过程来代替命令语句,因为存储过程是经过编译以后执行的,这样就能够提高数据库处理速度。
应用SqlDataSource的相关属性
替换包括"Where"或"Sort by"的SQL条件语句,充分利用SqlDataSource的相关属性(如:caching, filtering, 和sorting )
你可以将SqlDataSource对象的"EnableCaching"属性设置为true以激活将所检索的数据缓存于这个DataSource中。当你激活缓存时,SqlDataSource对象将对所检索的缓存数据中执行如filtering和Sorting。可以应用SqlDataSource对象的FilterExpression和SortParameterName两个属性来对数据进行过滤和排序操作。这样肯定能够提高你网站的性能。
ViewState加密
为了提高安全性,必须将重要的保存在ViewState的数据进行加密解密,但这样会对你的应用程序的速度带来一定的影响。加密包括一个以装载的对象初始化加上一个未加载的数据的大小,如果数据越大所耗的时间也越长,因此应对ViewState数据视其重要性而进行适当的加密。
分页
众所周知,如果你要显示一个给定数据源的数据,你必须用一些像:GridView或DetailsView等服务器控件,并将其数据源进行邦定。你可能将会通过GridView 或 DetailsView 来对数据源的记录或列进行筛选,将其paging属性设为true。这种分页技术叫做UI分页(User Interface paging)。为了实现这项功能,GridView控件会请求获取特殊的数据源,从中获取当前页面所需要的所有记录而忽视其他的数据。在每一页中都需要执行这样的操作,这样当然造成资源很大的浪费。
还有一个技术能实现这种功能,这中技术就是数据源分页技术。这种技术将借助于data source控件来实现,DataSourceView就是处理类,当GridView或DetailsView应用到此数据源时将其CanPage属性设为true。这样数据源将只取当前页的数据,可以看出数据源分页比UI分页更有效。唯一可以让数据源分页的为ObjectDataSource类。
缓存
应用缓存能够其他任何技术更能提高你网站的性能。.NET 框架提供了几种缓存页面的通道以及在ASP.NET应用程序中缓存数据的方法。你可以将很重要而又在各个请求中不变的数据或页面进行缓存。
为了能够使缓存更有效,请看以下几点:
-不要缓存短时间过期的缓存项,每一个缓存项过期都涉及到缓存的清理和垃圾的回收。
-不要缓存太大的缓存项,这样对每一项将消耗更多的内存。一些很容易计算等的数据就没有必要进行缓存。
缓存如此重要,Asp.NET框架给我们提供了多种的通道来逐渐改进我们的网站性能。这些方法包括:缓存应用程序数据,页面输出缓存,缓存一个网页和缓存页面中的一部分。
更多内容可以看MSDN。
来源:http://www.cnblogs.com/xdotnet/archive/2007/03/08/translate_speed_optimization_first.html