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
- 靈活運用Excel函式也能成批列印明信片Excel函式
- 報表工具中動態引數的靈活運用
- 《孫子兵法》與大資料概念,靈活運用才是高手!大資料
- 靈活運用Excel把有規律地文字資料分列Excel
- 靈活運用Excel把有規律地txt文字資料分列Excel
- 網站設計中網頁色彩靈活運用的重要性網站網頁
- 靈活運用分散式鎖解決資料重複插入問題分散式
- 在實際業務中如何靈活運用受控元件與非受控元件元件
- 運用高階篩選功能靈活刪除Excel地反覆記錄Excel
- ViewStateView
- 靈活的JavaScriptJavaScript
- 禁用ViewStateView
- APPKIT打造穩定、靈活、高效的運營配置平臺APP
- JavaScript 有多靈活?JavaScript
- Java設計模式——觀察者模式的靈活應用Java設計模式
- 區域性範圍掃描的靈活應用
- 靈活應用Windows XP硬體配置檔案(轉)Windows
- 陣列的靈活使用陣列
- C# ViewStateC#View
- 用規則引擎開發靈活配置的業務系統
- 正規表示式如何在PHP裡靈活的應用PHP
- 深入理解maven與應用(二):靈活的構建Maven
- 雲端辦公成時尚,雲賬戶讓靈活就業者更“靈活”就業
- 用屬性封裝 Session 及 VIewState 的存取封裝SessionView
- 如何開發以便靈活部署
- 高效靈活的分割槽操作
- 應用DMAIC減少偏心套軸承轉動不靈活AI
- 玩轉HTML5應用實戰:靈活拖拉檔案HTML
- Dynamic Wallpaper: 讓Mac每一刻都活靈活現Mac
- 更靈活的邊緣雲原生運維:OpenYurt 單元化部署新增 Patch 特性運維
- java靈活傳參之builder模式JavaUI模式
- 靈活的查詢設計方案
- python3列印不同方向的九九乘法表(for迴圈的靈活運用)Python
- iOS 高效靈活地配置可複用檢視元件的主題iOS元件
- 用Excel做資料排序地常用辦法與靈活技術Excel排序
- 【開源】Tsar——靈活的系統和應用採集軟體