日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何將ViewState持久化

如果你有一個(gè)非??岬捻撁妫撁嫔虾芏鄸|西自動地響應(yīng)用戶操作而展現(xiàn)豐富的變化,你的ViewState是很有可能達(dá)到200K的。

這里是我將ViewState持久化保持在服務(wù)器端的代碼,這樣ViewState不占用網(wǎng)絡(luò)帶寬,因此其存取只是服務(wù)器的磁盤讀取時(shí)間。并且它很小,可以說是磁盤隨便轉(zhuǎn)一圈就能同時(shí)讀取好多ViewState,因此可以說“不占時(shí)間”。為了再“不占磁盤時(shí)間”,我還使用了緩存。

一下這段代碼可以放在頁面中,或者頁面的父類中:

ViewState持久化C# code

 
 
 
  1. protected override object LoadPageStateFromPersistenceMedium()  
  2. {  
  3.     var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;  
  4.     var stateStr = (string)Cache[viewStateID];  
  5.     if (stateStr == null)  
  6.     {  
  7.         var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);  
  8.         stateStr = File.ReadAllText(fn);  
  9.     }  
  10.     return new ObjectStateFormatter().Deserialize(stateStr);  
  11. }  
  12.  
  13. protected override void SavePageStateToPersistenceMedium(object state)  
  14. {  
  15.     var value = new ObjectStateFormatter().Serialize(state);  
  16.     var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //產(chǎn)生離散的id號碼  
  17.     var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);  
  18.     ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value));  
  19.     Cache.Insert(viewStateID, value);  
  20.     base.SavePageStateToPersistenceMedium(viewStateID);  
  21. }  

不使用Session,因?yàn)樗鼤皝G失”。ViewState保存在磁盤上,即使服務(wù)器重新啟動,也不會丟失頁面狀態(tài)。

下面這段可以放在Global.asax中,也可以根本不管:

ViewState持久化C# code

 
 
 
  1. protected void Application_Start(object sender, EventArgs e)  
  2. {  
  3.     var dir = new DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/"));  
  4.     if (!dir.Exists)  
  5.         dir.Create();  
  6.     else 
  7.     {  
  8.         var nt = DateTime.Now.AddHours(-1);  
  9.         dir.GetFiles().ForEach(f =>  
  10.         {  
  11.             if (f.CreationTime < nt)  
  12.                 f.Delete();  
  13.         });  
  14.     }  
  15. }  

這可以確保絕對穩(wěn)定可靠地工作。以后請放心使用ViewState,把交互式頁面提高水平才是最重要的,不要糾纏在“ViewState太大”上。實(shí)際上,由于頁面設(shè)計(jì)不夠酷,交互變化看上去不夠豐富,ViewState實(shí)在是太小太小了。

如果你使用了它有效提高了復(fù)雜交互頁面的效率,可以說一下提高了多少?!如果你覺得沒用,也可以說一下在什么情況下沒用。

【編輯推薦】

  1. 常用Web Service匯總(天氣預(yù)報(bào)、時(shí)刻表等)
  2. .NET操作Word的實(shí)現(xiàn):using Word
  3. ASP.NET新手問題總結(jié)
  4. 深入研究Repeater控件:最大的靈活性
  5. DataList控件入門介紹

標(biāo)題名稱:如何將ViewState持久化
文章來源:http://www.dlmjj.cn/article/dhgcsho.html