搜索
首页数据库mysql教程化恶魔为天使,巧移ViewState至SqlServer

(发文后记:还是说清楚前提吧,本文只适用于当不得已才使用ViewState的情况) ViewState 一直以来备受争议,主要是因为他臃肿的体积,导致客户的的回传( PostBack )数据量很大,而其中真正有用的数据又很少,网络带宽被浪费不说,用户的体验也很差。 最近

(发文后记:还是说清楚前提吧,本文只适用于当不得已才使用ViewState的情况)
ViewState
一直以来备受争议,主要是因为他臃肿的体积,导致客户的的回传(PostBack)数据量很大,而其中真正有用的数据又很少,网络带宽被浪费不说,用户的体验也很差。

最近项目中用到了TelerikRadGrid,使用服务器端绑定数据后页面ViewState体积过大,而导致性能严重降低,便开始找寻优化方式,尽量将ViewState存在务器端

由于项目已开发至中期,不可能做类似于取消ViewState或使用客户端绑定之类的大规模改动。

要想改动量最小化,肯定不能影响原有ViewState的使用,那只能重写Page类的LoadPageStateFromPersistenceMedium()SavePageStateToPersistenceMedium(object state)的方法,在这两个Override的方法中把数据存在别的什么地方。

这时候就来问题了,ViewState只是一个页面的周期,每打开一个页面都会生成一个新的ViewState,连刷新都不例外,如果存在文件或数据库中,这些数据累积起来可不是开玩笑的,而且也用不上了,那还不得要写过期删除的方法么?太麻烦了。这时候,Session就发挥大作用了,Session的生命周期长于ViewState,过期会自动删除,而且还是存在服务器端的,不会增加数据传输量,看来很合适。

代码如下:

化恶魔为天使,巧移ViewState至SqlServer化恶魔为天使,巧移ViewState至SqlServerCode
public class AmoPage: System.Web.UI.Page
{
    
#region === Move View State To Session ===

    
private string _pageGuid = null;
    
public string PageGUID
    {
        
get
        {
            
if (_pageGuid == null)
                _pageGuid 
= this.Request.Form["__AmoViewState"];
            
if (_pageGuid == null)
                _pageGuid 
= Guid.NewGuid().ToString();
            
return _pageGuid;
        }
        
set { _pageGuid = value; }
    }

    
protected override object LoadPageStateFromPersistenceMedium()
    {
        
return Session[this.PageGUID];
    }

    
protected override void SavePageStateToPersistenceMedium(object state)
    {
        RegisterHiddenField(
"__AmoViewState"this.PageGUID);
        Session[
this.PageGUID] = state;
    }

    
#endregion
}


但是不能忽略一个问题,
Session默认是由WebServer 管理的,一般只用于存储会话中用户登录信息这种数据量极小的情况,如果直接把ViewState这个大胖子塞进去,全部是保存在内存中的,无疑用不了多长时间,WebServer就会因为Session数据量过大而崩溃。看来我们还需要转移Session

正好,ASP.NET支持自定义会话管理的方式:

开始-> All Programs-> Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 Command Prompt

进入VS命令行模式。

执行 aspnet_regsql –S (192.168.19.250) –U sa –P 123 –ssadd

这是指使用用户名sa 密码123登录到SQLServer服务器192.168.19.250上添加状态管理相关的数据库。其实它是建立了一个只有出口存储过程的数据库ASPState,并在系统数据库tempdb中加入了两张分别用于存储Application Session的表。

这时候我们就完成了状态管理相关的数据库的创建,然后只要在 Web.config中做如下设置即可

system.web>
    
sessionState mode="SQLServer" sqlConnectionString="Data Source=192.168.19.250;User ID=sa;Password=123;">sessionState>
system.web>


这时候,该Web应用的Session数据就会存储于数据库中。

在使用的时候,只要将原有的页面都从AmoPage类继承就行。

至于效果,试过就知道!
使用前:(很熟悉吧...)
化恶魔为天使,巧移ViewState至SqlServer

使用后:(干净,清透,没问题!)
化恶魔为天使,巧移ViewState至SqlServer

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
sqlserver数据库中已存在名为的对象怎么解决sqlserver数据库中已存在名为的对象怎么解决Apr 05, 2024 pm 09:42 PM

对于 SQL Server 数据库中已存在同名对象,需要采取以下步骤:确认对象类型(表、视图、存储过程)。如果对象为空,可使用 IF NOT EXISTS 跳过创建。如果对象有数据,使用不同名称或修改结构。使用 DROP 删除现有对象(谨慎操作,建议备份)。检查架构更改,确保没有引用删除或重命名的对象。

怎么查看sqlserver端口号怎么查看sqlserver端口号Apr 05, 2024 pm 09:57 PM

要查看 SQL Server 端口号:打开 SSMS,连接到服务器。在对象资源管理器中找到服务器名称,右键单击它,然后选择“属性”。在“连接”选项卡中,查看“TCP 端口”字段。

sqlserver数据库在哪里sqlserver数据库在哪里Apr 05, 2024 pm 08:21 PM

SQL Server 数据库文件通常存储在以下默认位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可通过修改数据库文件路径设置来自定义数据库文件位置。

Java连接SqlServer错误如何解决Java连接SqlServer错误如何解决May 01, 2023 am 09:22 AM

问题发现这次使用的是SqlServer数据库,之前并没有使用过,但是问题不大,我按照需求文档的步骤连接好SqlServer之后,启动SpringBoot项目,发现了一个报错,如下:刚开始我以为是SqlServer连接问题呢,于是便去查看数据库,发现数据库一切正常,我首先第一时间问了我的同事,他们是否有这样的问题,发现他们并没有,于是我便开始了我最拿手的环节,面向百度编程。开始解决具体报错信息是这样,于是我便开始了百度报错:ERRORc.a.d.p.DruidDataSource$CreateCo

Win11无法安装SQL Server的原因及解决方案Win11无法安装SQL Server的原因及解决方案Dec 27, 2023 pm 07:48 PM

有网友反馈,在win11上无法安装sqlserver这款软件,不知道是怎么回事,根据目前的测试来看,win11存在硬盘问题,部分接口硬盘无法安装这款软件。win11为啥不能安装sqlserver:答:win11不能安装sqlserver是硬盘的问题。1、据了解,win11存在对于硬盘的检测bug。2、这导致sqlserver无法在“三星m.2接口”硬盘上安装。3、因此,如果我们要安装的话,需要准备一块其他硬盘。4、然后将该硬盘安装到电脑里,如果没有额外插槽的话就要换掉之前的硬盘。5、安装完成后,

sqlserver数据库日志怎么查询sqlserver数据库日志怎么查询Apr 05, 2024 pm 09:06 PM

可以通过以下步骤查询 SQL Server 数据库日志:1. 打开 SQL Server Management Studio,连接到数据库服务器;2. 展开“管理”节点,导航到“SQL Server 日志”;3. 选择要查询的日志文件,右键单击并选择“查看日志文件”;4. 浏览日志记录。其他查询日志方法:使用 Transact-SQL 查询、PowerShell Cmdlet。

sqlserver数据库删除了怎么恢复sqlserver数据库删除了怎么恢复Apr 05, 2024 pm 09:33 PM

如果 SQL Server 数据库被删除,可以使用以下方法进行恢复:从备份恢复:如果定期进行备份,按照 SQL Server Management Studio 中的步骤从备份恢复已删除的数据库。使用事务日志恢复:如果启用事务日志记录,按照指定的步骤使用事务日志文件恢复已删除的数据库。使用原始设备恢复:如果物理设备仍然可用,按照指定的步骤使用原始设备恢复已删除的数据库。使用数据恢复工具:如果其他方法无效,可以使用第三方数据恢复工具尝试恢复已删除的数据库。

怎么完全删除sqlserver数据库怎么完全删除sqlserver数据库Apr 05, 2024 pm 09:45 PM

要完全删除 SQL Server 数据库:1. 连接到包含数据库的服务器实例;2. 右键单击数据库并选择“删除”;3. 确认删除;4. 验证删除完成。注意:删除操作不可逆,请务必事先备份数据。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)