【轉載】很好的解決了asp.net頁面ViewState過大的問題

來源:互聯網
上載者:User

如果你有一個非常酷的頁面,頁面上很多東西自動地響應使用者操作而展現豐富的變化,你的ViewState是很有可能達到200K的。 

這裡是我將ViewState持久化保持在伺服器端的代碼,這樣ViewState不佔用網路頻寬,因此其存取只是伺服器的磁碟讀取時間。並且它很小,可以說是磁碟隨便轉一圈就能同時讀取好多ViewState,因此可以說“不佔時間”。為了再“不佔磁碟時間”,我還使用了緩衝。

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

#region 解決ViewState過於龐大的問題
    protected override object LoadPageStateFromPersistenceMedium()
    {
        string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
        string stateStr = (string)Cache[viewStateID];
        if (stateStr == null)
        {
            string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
            stateStr = File.ReadAllText(fn);
        }
        return new ObjectStateFormatter().Deserialize(stateStr);
    }

    protected override void SavePageStateToPersistenceMedium(object state)
    {
        string value = new ObjectStateFormatter().Serialize(state);
        string viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //產生離散的id號碼
        string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
        //ThreadPool.QueueUserWorkItem(File.WriteAllText(fn, value));
        File.WriteAllText(fn, value); 
        Cache.Insert(viewStateID, value);
        base.SavePageStateToPersistenceMedium(viewStateID);
    }
    #endregion

2.添加Global.asax 檔案

在Global.asax檔案中添加如下語句:

void Application_Start(object sender, EventArgs e) 
    {
        // 在應用程式啟動時啟動並執行代碼

        System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/"));
        if (!dir.Exists)
            dir.Create();
        else
        {
            DateTime nt = DateTime.Now.AddHours(-1);
            foreach (System.IO.FileInfo f in dir.GetFiles())
            {
                if (f.CreationTime < nt)
                    f.Delete();
            }
        }
    }
產生,運行。查看頁面原始碼,有沒有發現ViewState一下子不見了許多,哈哈,別著急,都在App_Data/ViewState檔案下面儲存著呢。用記事本開啟看看,是不是和原來頁面的一模一樣。通過這樣的處理,我們就可以很好的解決頁面由於存在ViewState,導致頁面很多垃圾代碼的問題,這樣對於搜尋引擎是很不利的哦!

 

     想要你的頁面變的乾淨利落嗎?那還等什麼,趕緊Copy吧,本代碼經過測試,可以正常運行。

                                                                                                            -----因ViewState糾結太久,今天終於豁然開朗。

 

【轉載】:轉自http://hi.baidu.com/%CE%F7%C3%C5%C7%EC_7%BA%C5/blog/item/02bd8788a60ed8bf0f2444ba.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.