首頁 資料庫 mysql教程 化恶魔为天使,巧移ViewState至SqlServer

化恶魔为天使,巧移ViewState至SqlServer

Jun 07, 2016 pm 03:46 PM
sqlserver viewstate 天使 惡魔

(发文后记:还是说清楚前提吧,本文只适用于当不得已才使用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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1320
25
PHP教程
1269
29
C# 教程
1249
24
sqlserver怎麼匯入mdf文件 sqlserver怎麼匯入mdf文件 Apr 08, 2024 am 11:41 AM

匯入步驟如下:將 MDF 檔案複製到 SQL Server 的資料目錄(通常為 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)。在 SQL Server Management Studio(SSMS)中,開啟資料庫並選擇「附加」。點選“新增”按鈕,選擇 MDF 檔案。確認資料庫名稱,點選確定按鈕即可。

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 10:39 PM

若誤刪 SQL Server 資料庫,可採取下列步驟還原:停止資料庫活動;備份日誌檔案;檢查資料庫日誌;復原選項:從備份還原;從交易日誌還原;使用 DBCC CHECKDB;使用第三方工具。請定期備份資料庫並啟用交易日誌以防止資料遺失。

sqlserver資料庫在哪裡 sqlserver資料庫在哪裡 Apr 05, 2024 pm 08:21 PM

SQL Server 資料庫檔案通常儲存在下列預設位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可透過修改資料庫檔案路徑設定來自訂資料庫檔案位置。

sqlserver服務無法啟動怎麼辦 sqlserver服務無法啟動怎麼辦 Apr 05, 2024 pm 10:00 PM

當 SQL Server 服務無法啟動時,可採取下列步驟解決:檢查錯誤日誌以確定根本原因。確保服務帳戶具有啟動服務的權限。檢查依賴項服務是否正在執行。禁用防毒軟體。修復 SQL Server 安裝。如果修復不起作用,重新安裝 SQL Server。

Java連接SqlServer錯誤如何解決 Java連接SqlServer錯誤如何解決 May 01, 2023 am 09:22 AM

問題發現這次使用的是SqlServer資料庫,之前並沒有使用過,但是問題不大,我按照需求文檔的步驟連接好SqlServer之後,啟動SpringBoot項目,發現了一個報錯,如下:剛開始我以為是SqlServer連接問題呢,於是便去查看資料庫,發現資料庫一切正常,我首先第一時間問了我的同事,他們是否有這樣的問題,發現他們並沒有,於是我便開始了我最拿手的環節,面向百度程式設計.開始解決具體報錯資訊是這樣,於是我便開始了百度報錯:ERRORc.a.d.p.DruidDataSource$CreateCo

sqlserver安裝失敗怎麼樣刪除乾淨 sqlserver安裝失敗怎麼樣刪除乾淨 Apr 05, 2024 pm 11:27 PM

如果 SQL Server 安裝失敗,可透過下列步驟清理:解除安裝 SQL Server刪除註冊表項刪除檔案和資料夾重新啟動計算機

See all articles