国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 繁昌县| 赤峰市| 饶平县| 柏乡县| 宜良县| 碌曲县| 普定县| 平原县| 和平县| 开平市| 山西省| 互助| 仙居县| 永川市| 汾阳市| 合水县| 孟州市| 五指山市| 江油市| 南充市| 鄂托克旗| 阳泉市| 夹江县| 天气| 大英县| 康平县| 赤水市| 怀仁县| 河津市| 九龙坡区| 东乡族自治县| 清水河县| 蕲春县| 乐陵市| 兴宁市| 社旗县| 大渡口区| 二手房| 平原县| 鲁甸县| 睢宁县|