ASP.NET状态保存提高每个请求的性能

发表于:2008-05-07来源:作者:点击数: 标签:性能状态NetNETASP
随着时代车论的推进,先进社会的系统越来越基于WEB模式了,在一个WEB系统中,我们经常需要在系统里保存一些状态值.那么在ASP.NET里保存状态又有那些方法呢?既然WEB系统是B/S模式,那么我们的状态理所当然地可以保存在 服务器 或客户端,于是产生了客户端保存和服务
 随着时代车论的推进,先进社会的系统越来越基于WEB模式了,在一个WEB系统中,我们经常需要在系统里保存一些状态值.那么在ASP.NET里保存状态又有那些方法呢?既然WEB系统是B/S模式,那么我们的状态理所当然地可以保存在服务器或客户端,于是产生了客户端保存和服务器端两种保存方式.

  我们首先看使用服务器端保存方式.

  服务器端保存方式一般有如下3种:

  存储页信息的服务器端选项往往比客 户端选项具有更高的安全性,但它们可能使用更多的 Web 服务器资源,这可能在信息存储量较大时导致可缩放性问题。

  1,Application:

  利用场合:所有的请求都会需要的一些共有资源,由最先的一个请求率先获取之后,拿出来共享,其他的请求就不用浪费资源进行再次获取。典型利用场合:一个股市 Web 站点可能在一天中每 5 分钟从数据库获取大量的金融股票信息(也许是 40 MB 的数据),然后将这些信息缓存在应用程序状态中,这样所有以后的查找请求都可以在应用程序状态中访问这些信息。其结果是极大地提高了每个请求的性能,因为传入的请求不需要跨进程、跨计算机或数据库的往返过程。
'首次Http Get请求 If Not Me.IsPostBack Then '先判断Application中是否已経有了缓存 If Application.Item("Database") Is Nothing Then '若没有,从DataCenter中获取 Dim ds As New DataSet ds.ReadXml(Server.MapPath("TestData.xml")) Dim dv As New DataView(ds.Tables(0)) '拿到之后, 缓存到Application,方便别的进程Http Get请求复用 Application.Add("DataBase", dv) End If Dim dv1 As DataView dv1 = Application.Item("DataBase") '缓存到Session, 方便当前进程的Http Post请求 Session.Add("DataBase", dv1) End If
  优点:易于实现,全局范围。

  缺点:持久性,若 保存数据的服务器端进程被强行关闭,那么数据就会丢失,所以利用Application一定要有保底的策略,有的话就使用,没有的话就自己拿。耗用服务器端的内存。

  注意:因为Application中的数据被多个进程公用,所以若需要更新其中的值时,需要利用 如下的语句,做到独占更新:
Application.Lock() Application.Item("DataBase ") = NewDataBase Application.UnLock()
  2,Session:

  利用场合:单独的一个进程内部使用,存储单独会话的短期的、敏感的数据。

  优点:易于实现,持久性,可以应对IIS重启和辅助进程重启, 可在多进程中使用

  缺点:耗用服务器端的内存。

  3,Database:

  优点:安全性。 容量。 持久性。 可靠性和数据完整性。 可访问性。 广泛支持。

  缺点:复杂,性能

  方法:使用场合

  应用程序状态:存储更改不频繁的全局信息,这些信息由多个用户使用,此时安全性不成为问题。不要在应用程序状态中存储大量的信息。

  会话状态:存储特定于单独会话的短期信息,并且需要较高的安全性。不要在会话状态中存储 大量的信息。在支持许多用户的应用程序中,这可能会占用大量服务器资源并影响可缩放性。

  数据库支持:存储大量信息,管理交易,或者信息必须可以经受得住应用程序和会话重新启动。数据挖掘十分重要,并且需要较高的安全性。