您的位置:首页 > 编程语言 > ASP

ASP.NET中状态对象使用性能优化

2007-04-05 17:20 453 查看
以前的ASP允许开发人员访问会话状态信息,并且允许他们将有关用户的信息存储在这个会话对象的内部。这些信息可以从站点的任何一个其它的页面上进行访问。但是,ASP会将这些信息保存在Web服务器的内存之中。因此,如果使用多台Web服务器,用户的请求可能就会被发送到一个与发起会话的服务器不同的其它服务器上,有关会话的信息将无法获得。如果某个Web服务器重新进行了启动,它保存的所有会话信息都将丢失,这对站点的正常运转会造成不可估量的影响。

而目前的ASP.NET初了提供传统的单服务器会话信息,还为会话信息的集中提供了两个方法,这使得用户可以从很多不同服务器上获得这些会话数据。具体使用两种方法中的哪一种完全由系统管理员来决定 —— 它并没有以代码形式固定在程序之中。所以,对于那些不是针对Web商务模型进行设计的ASP .NET Web程序或Web服务,系统管理员可以对其进行衡量和分等。

ASP.NET可以使用三种方法存储会话状态信息:存储在进程中;存储在一台中央状态服务器上;或者存储在SQL Server数据库中。将会话信息保存在进程中这种方法与传统的ASP会话类似,因为会话状态信息也保存在Web服务器的内存之中,不和其它系统进行共享。这种配置方法具有最佳的执行性能,因为ASP.NET不需要同网络中的其它系统通信以取得会话信息。但是,这种做法限制了系统的伸缩性 —— 会话不能跨越多台服务器,而且如果用户从一台Web服务器移动到了另一台服务器上,他们的会话信息将被丢失。

状态服务器是运行一种特殊服务的中央服务器,该服务内置在.NET Framework之中。状态服务器存储状态信息供Web应用程序中的多台服务器使用。用户可以从一台Web服务器移动到另一台,而不会丢失状态信息。状态服务器引入了一些额外的工作负载,因为在每次用户请求一个页面的时候,会话信息必须能够通过从Web服务器发送到状态服务器的网络请求被检索和被更新。虽然需要花费一些额外工作来处理用户请求,但是系统的伸缩性和可靠性却因此得到了极大的提高,因为Web应用程序可以伸缩到多个多台服务器上。

存储会话状态信息的第三种方法是使用一个SQL Server数据库。这种方法具有与使用中央状态服务器相同的好处 —— 会话可以跨越多台Web服务器进行跟踪。但是,同使用中央状态服务器相比,使用SQL Server服务器跟踪会话产生的工作负载更大。SQL Server服务器能够配置成群集的形式,从而提供最大限度的冗余。此外,SQL Server可以伸缩到配备4颗处理器的高端硬件上,从而实现更多会话的并发存储。

要对状态对象的使用进行优化,就必须首先了解“超时”,“超时”设置定义了会话状态在用户进行上一次请求后能够存留的时间。默认情况下,该时间被设置为20分钟。所以,如果用户等上20分钟后再向服务器发送一个请求,服务器将创建一个新的会话。该设置不会影响系统,特别是在使用存储在进程中的会话的时候。超时时间定义的越长,在用户不主动访问您的站点期间会话中所存储信息的存活时间也就越长。但是,会话状态在进程中进行维护会占用Web服务器的内存。

如果你的站点用户较少,但是他们的停留时间比较长,或者他们每天都定期多次访问你的站点,那么你可以定义一个较长时间的超时设置。如果你的站点有成千上万的用户,而且这些用户一般仅仅浏览一两个页面就离开,那么你可以设置一个较短时间的超时设置。然后,请仔细监视Web服务器的运行情况,以确定对会话状态的维护是否会对系统性能造成不良影响。

为了调整超时设置,请监视“ASP.NET应用程序”对象中的“活动会话”计数器。该计数器指出了当前活动会话的数目,一般来说,该数目会随着超时时间的增加而增多。Web服务器所能够处理的最大会话数量随存储在会话中的信息应用程序数量不同而发生变化。但是,保有过多的并发会话将消耗大量的服务器内存。因此,你还应该监视服务器的内存使用情况。如果在提高了会话的超时时间设置之后,内存的分页操作也随之增加了,那么你应该减少会话的超时时间,或者在服务器上增加更多的内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐