我爱Aspx >> Asp.Net >> 通过避免10 个常见 ASP.NET 缺陷使网站平稳运行public class SessionPageStateAdapter :
System.Web.UI.Adapters.PageAdapter
{
public override PageStatePersister GetStatePersister ()
{
return new SessionPageStatePersister(this.Page);
}
}
然后,通过将 App.browsers 文件按以下方式放入应用程序的 App_Browsers 文件夹,将自定义页适配器注册为默认页适配器:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page"
adapterType="SessionPageStateAdapter" />
</controlAdapters>
</browser>
</browsers>
(您可以将文件命名为您喜欢的任何名称,只要它的扩展名为 .browsers 即可。)此后,ASP.NET 将加载页适配器并使用返回的 SessionPageStatePersister 以保留所有页面状态,包括视图状态。
使用自定义页适配器的一个缺点是它全局性地作用于应用程序中的每一页。如果您更愿意将其中一些页面的视图状态保留在会话状态中而不保留其他页面的视图状态,请使用图 4 中显示的方法。另外,如果用户在同一会话中创建多个浏览器窗口,您使用该方法可能会遇到问题。
返回页首
SQL Server 会话状态:另一个性能杀手
ASP.NET 使得在数据库中存储会话状态变得简单:只需切换 web.config 中的开关,会话状态就会轻松地移动到后端数据库。对于在 Web 领域中运行的应用程序来说,这是一项重要功能,因为它允许该领域中的每个服务器共享会话状态的一个公共库。添加的数据库活动降低了单个请求的性能,但是可伸缩性的提高弥补了性能的损失。
这看起来都还不错,但是您略微考虑一下下列几点,情况就会有所不同:
? 即使在使用会话状态的应用程序中,大多数页也不使用会话状态。
? 默认情况下,ASP.NET 会话状态管理器对每个请求中的会话数据存储执行两个访问(一个读取访问和一个写入访问),而不管请求的页是否使用会话状态。
换句话说,当您使用 SQL Server? 会话状态选项时,您在每个请求中都要付出代价(两个数据库访问)— 甚至在与会话状态无关的页面的请求中。这会直接对整个网站的吞吐量造成负面影响。

图 5 消除不必要的会话状态数据库访问
那么您应该怎么办呢?很简单:禁用不使用会话状态的页中的会话状态。这样做总是一个好办法,但是当会话状态存储在数据库中时,该方法尤其重要。图 5 显示如何禁用会话状态。如果页面根本不使用会话状态,请在其 Page 指令中包含 EnableSessionState="false",如下所示:
Ҷƪл˵?
ASP.NET 2.0服务器控件与form ru..[04-21]
使用 C# .NET 写入事件日志[04-21]
ASP.NET 2.0中Page事件的执行顺序[04-21]
ASP.NET Atlas 強力支援您期待已..[04-21]
在ASP.NET Atlas中调用Web Servi..[04-21]
文件压缩代码(为.Net2.0新增)[04-21]
ASP.NET 2.0+Atlas编写鼠标拖放程..[04-21]
ASP.NET2.0中Gridview中数据操作..[04-21]
ASP.NET 2.0中使用multiview控件[04-21]
ASP.NET 2.0中实现跨页面提交[04-21]
ASP.NET 2.0服务器控件与form ru..[04-21]
使用 C# .NET 写入事件日志[04-21]
我的可爱的小外甥们小侄子们[04-21]
一个高中毕业生关于互联网创业的..[04-21]
BSP 模式的一些思考和结论[04-21]
RSS2.0中文规范详解及示例[04-21]
网易部落的rss弱智错误[04-21]
ASP.NET 2.0中Page事件的执行顺序[04-21]
雅虎搜虫大行动----快来抓毛毛虫..[04-21]
为什么XML文件的分析结果出现乱码..[04-21]