国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

壓縮ASP.NET中的ViewState

2024-07-10 13:12:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友


收集最實(shí)用的網(wǎng)頁(yè)特效代碼!

服務(wù)器端控件帶來(lái)的好外我在這就不多說(shuō)了,但多過(guò)的使用服務(wù)器端件保存控件的狀態(tài)會(huì)帶來(lái)大量的viewstate的情況大家一定遇到過(guò)吧.過(guò)多的viewstate會(huì)很大程度上降低頁(yè)面的加載速度制成服務(wù)器端的性能下降.

以下是結(jié)合csharpziplib對(duì)viewstate進(jìn)行壓縮的方法.

msplus.web.ui.page 源碼:
using system;
using system.web.ui;
using system.io;
using icsharpcode.sharpziplib.zip.compression;

namespace msplus.web.ui
{
    /**//// <summary>
    /// 壓縮viewstate by mack.z (msplus)
    /// </summary>
    public class page : system.web.ui.page
    {

        protected override void savepagestatetopersistencemedium(object pviewstate)
        {
            losformatter mformat = new losformatter();
            stringwriter mwriter = new stringwriter();

            mformat.serialize(mwriter, pviewstate);
            string mviewstatestr = mwriter.tostring();

            byte[] pbytes = system.convert.frombase64string(mviewstatestr);

            pbytes = compress(pbytes);

            string vstatestr = system.convert.tobase64string(pbytes);

            registerhiddenfield("__mspvstate", vstatestr);
        }

        protected override object loadpagestatefrompersistencemedium()
        {
            string vstate = this.request.form.get("__mspvstate");

            byte[] pbytes = system.convert.frombase64string(vstate);

            pbytes = decompress(pbytes);

            losformatter mformat = new losformatter();

            return mformat.deserialize(system.convert.tobase64string(pbytes));
        }


        public static byte[] compress(byte[] pbytes)
        {
            memorystream mmemory = new memorystream();

            deflater mdeflater = new deflater(icsharpcode.sharpziplib.zip.compression.deflater.best_compression);
            icsharpcode.sharpziplib.zip.compression.streams.deflateroutputstream mstream = new icsharpcode.sharpziplib.zip.compression.streams.deflateroutputstream(mmemory,mdeflater,131072);

            mstream.write(pbytes,0,pbytes.length);
            mstream.close();

            return mmemory.toarray();
        }


        public static byte[] decompress(byte[] pbytes)
        {
            icsharpcode.sharpziplib.zip.compression.streams.inflaterinputstream mstream = new icsharpcode.sharpziplib.zip.compression.streams.inflaterinputstream(new memorystream(pbytes));
           
            memorystream mmemory = new memorystream();
            int32 msize;

            byte[] mwritedata = new byte[4096];

            while(true)
            {
                msize = mstream.read(mwritedata, 0, mwritedata.length);
                if (msize > 0)
                {
                    mmemory.write(mwritedata, 0, msize);
                }
                else
                {
                     break;
                }
            }

            mstream.close();
            return mmemory.toarray();
        }

    }
}

使用方法(aspx.cs頁(yè)面繼承msplus.web.ui.page):public class pageclass : system.web.ui.page


測(cè)試下來(lái)的結(jié)果:壓縮后的viewstate只有原來(lái)的20%!


--------------------------------------------------------------------------------

我作了一個(gè)小小的測(cè)試.先后用同一個(gè)頁(yè)面加密和不加密的情況下,刷新頁(yè)面觀測(cè)w3wp.exe的cpu占用情況.此頁(yè)面的viewstate大小為3.996 bytes

w3wp.exe 以下是每次刷新的時(shí)cpu的情況

05 03 05 03 06 05 05 08 03 05 03 不加密,平均是 4.6
05 05 06 05 05 03 08 02 03 05 06 加密,平均是5.3

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙川县| 宜州市| 绥江县| 灵川县| 舒兰市| 沙雅县| 江达县| 保亭| 天镇县| 乳山市| 旺苍县| 延安市| 云阳县| 元谋县| 财经| 麻栗坡县| 秭归县| 本溪市| 壤塘县| 娄烦县| 冕宁县| 体育| 新津县| 同心县| 资源县| 贺州市| 拜城县| 边坝县| 府谷县| 沅江市| 芦溪县| 许昌市| 鄂州市| 铁岭市| 个旧市| 海宁市| 嘉义市| 诏安县| 万盛区| 华蓥市| 双牌县|