ViewState靈活運用

taogchan發表於2013-01-11

如果你有一個非常酷的頁面,頁面上很多東西自動地響應使用者操作而展現豐富的變化,你的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);
}
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章