ViewState靈活運用
如果你有一個非常酷的頁面,頁面上很多東西自動地響應使用者操作而展現豐富的變化,你的ViewState是很有可能達到200K的。
這裡是我將ViewState持久化保持在伺服器端的程式碼,這樣ViewState不佔用網路頻寬,因此其存取只是伺服器的磁碟讀取時間。並且它很小,可以說是磁碟隨便轉一圈就能同時讀取好多ViewState,因此可以說“不佔時間”。為了再“不佔磁碟時間”,我還使用了快取。
一下這段程式碼可以放在頁面中,或者頁面的父類中:
protected override object LoadPageStateFromPersistenceMedium()
{
var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
var stateObject = Cache[viewStateID];
if (stateObject != null)
{
Cache.Remove(viewStateID); //這一行是新加的,在不確定Cache是否智慧地管理記憶體之前,值得試試這樣執行
return stateObject;
}
var fn = this.Server.MapPath("~/App_Data/ViewState/" + viewStateID);
var stateStr = File.ReadAllText(fn);
return new ObjectStateFormatter().Deserialize(stateStr);
}
var stateStr = File.ReadAllText(fn);
return new ObjectStateFormatter().Deserialize(stateStr);
}
protected override void SavePageStateToPersistenceMedium(object state) { var value = new ObjectStateFormatter().Serialize(state); var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //產生離散的id號碼 var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID); ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value)); Cache.Insert(viewStateID, value); base.SavePageStateToPersistenceMedium(viewStateID); }
不使用Session,因為它會“丟失”。ViewState儲存在磁碟上,即使伺服器重新啟動,也不會丟失頁面狀態。
下面這段可以放在Global.asax中,也可以根本不管:
C# code?12345678910111213141516 protected void Application_Start(object sender, EventArgs e) { var dir = new DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/")); if (!dir.Exists) dir.Create(); else { var nt = DateTime.Now.AddHours(-1); dir.GetFiles().ForEach(f => { if (f.CreationTime < nt) f.Delete(); }); } }
這可以確保絕對穩定可靠地工作。以後請放心使用ViewState,把互動式頁面提高水平才是最重要的,不要糾纏在“ViewState太大”上。實際上,由於頁面設計不夠酷,互動變化看上去不夠豐富,ViewState實在是太小太小了。
如果你使用了它有效提高了複雜互動頁面的效率,可以說一下提高了多少?!如果你覺得沒用,也可以說一下在什麼情況下沒用。
轉:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-752521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 靈活運用JavaScript開發技巧JavaScript
- 靈活運用JS開發技巧(66個實用技巧)JS
- 報表工具中動態引數的靈活運用
- 《孫子兵法》與大資料概念,靈活運用才是高手!大資料
- 創業者需要的品質:靈活!靈活!靈活創業
- C# ViewStateC#View
- 網站設計中網頁色彩靈活運用的重要性網站網頁
- 靈活運用分散式鎖解決資料重複插入問題分散式
- 在實際業務中如何靈活運用受控元件與非受控元件元件
- APPKIT打造穩定、靈活、高效的運營配置平臺APP
- 靈活使用Maven ProfileMaven
- Fiddler的靈活使用
- 陣列的靈活使用陣列
- 正規表示式如何在PHP裡靈活的應用PHP
- Java設計模式——觀察者模式的靈活應用Java設計模式
- python3列印不同方向的九九乘法表(for迴圈的靈活運用)Python
- 如何靈活使用 Hyperf dependencies 配置
- 應用DMAIC減少偏心套軸承轉動不靈活AI
- 用規則引擎開發靈活配置的業務系統
- 雲端辦公成時尚,雲賬戶讓靈活就業者更“靈活”就業
- 更靈活的邊緣雲原生運維:OpenYurt 單元化部署新增 Patch 特性運維
- 【開源】Tsar——靈活的系統和應用採集軟體
- iOS 高效靈活地配置可複用檢視元件的主題iOS元件
- java靈活傳參之builder模式JavaUI模式
- Python:靈活的開發環境Python開發環境
- Dynamic Wallpaper: 讓Mac每一刻都活靈活現Mac
- ASP.NET Web 窗體- 保持 ViewState簡介ASP.NETWebView
- 靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn阿里GNN框架
- 虛擬串列埠工具MCGS開發除錯的靈活應用教程串列埠除錯
- 更簡單靈活地管理 Ruby 版本
- 靈活的API查詢語言——GraphQLAPI
- iOS 靈活的控制狀態列StatusBariOS
- 如何在 Laravel 中靈活的使用 TraitLaravelAI
- Java ArrayList 與 LinkedList 的靈活選擇Java
- Dig101: Go之靈活的sliceGo
- Dig101: Go 之靈活的 sliceGo
- 靈活使用 SQLAlchemy 中的 ORM 查詢SQLORM
- Flutter Spacer 靈活配置你的Row/ColumnFlutter
- .net core 靈活讀取配置檔案