Agusto Xaverius P Sipahutar

Job:Making some bugs and patch
Moss/Wss,C#,Sql Server,WWF,K2.BlackPearl
Motto : Keep Study and study
See also: Other Geeks@INDC

News




MCP Logo
MCTS Logo

MCP ID# 3542391

My Curiculum Vitae


Agusto Xaverius P S's Facebook profile

Other Article

My Community

My Article/Share Knowledge

Others Moss/Wss Site

My Other Website/Blogs

My Share (Ebook,etc)

ViewState Compression with ICSharpCode.SharpZipLib

Saya lihat dari blog kita membicarakan mengenai menggunakan "Cache" yang juga tujuan nya untuk mengoptimalkan bandwidth, dan request ke server untuk melakukan job meload data yang biasa nya data itu pun ternyata dalam kurun waktu tertentu masih sama dengan data yang kita telah load sebelumnya.

Di bawah ini saya berikan contoh aplikasi mengkompres Viewstate di mana kita bisa juga menyimpan data di viewstate dan biasanya juga datagrid/gridview sangat besar menggunakan viewstate ini. Saya juga lihat pada saat penggunaan Crystal Report Viewer di Asp.Net saya lihat di aplikasi saya ViewState ini pun cukup besar penggunaan nya.

Oleh karena itu kita bisa melakukan optimasi dengan menggunakan zip compression bawan dari .Net 2.0 atau kita menggunakan library free dari ICSharpCode.SharpZipLib.

Code nya sbb :

1. Class  ZipUtil

using System;
using System.IO;
using System.Text;
using Zip = ICSharpCode.SharpZipLib.Zip.Compression;

namespace MyWeb
{
    public class ZipUtil
    {
        public static byte[] Compress(byte[] Bytes)
       {
           MemoryStream memory = new MemoryStream();
           ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream stream =
               new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(memory,new Zip.Deflater(Zip.Deflater.BEST_COMPRESSION),131072); 
           stream.Write(Bytes, 0, Bytes.Length);
           stream.Close();
           return memory.ToArray();
       }

        public static byte[] Decompress(byte[] Bytes)
        {
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream stream =
                new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(Bytes));
            MemoryStream memory = new MemoryStream();
            byte[] writeData = new byte[4096];
            int size;

            while (true)
            {
                size = stream.Read(writeData, 0, writeData.Length);
                if (size > 0)
                {
                    memory.Write(writeData, 0, size);
                }else break;
            }
            stream.Close();
            return memory.ToArray();
        }
    }  
}
 

2. Class PageViewStateZip

 using System;
using System.IO;
using System.Web.UI;

/// <summary>
/// Summary description for PageViewStateZip
/// </summary>

namespace MyWeb

{
    public class PageViewStateZip : System.Web.UI.Page
    {
        protected override object LoadPageStateFromPersistenceMedium()
        {
            string vstate = this.Request.Form["__VSTATE"];
            byte[] bytes = System.Convert.FromBase64String(vstate);
            bytes = ZipUtil.Decompress(bytes);
            LosFormatter format = new LosFormatter();
            return format.Deserialize(System.Convert.ToBase64String(bytes));
        }

        protected override void SavePageStateToPersistenceMedium(object viewState)
        {
            LosFormatter format = new LosFormatter();
            StringWriter writer = new StringWriter();
            format.Serialize(writer, viewState);
            String viewStateStr = writer.ToString();
            byte[] bytes = System.Convert.FromBase64String(viewStateStr);
            bytes = ZipUtil.Compress(bytes);
            string vStateStr = System.Convert.ToBase64String(bytes);
            ClientScript.RegisterHiddenField("__VSTATE", vStateStr);
        }

    }
}

Setelah kita mempunyai ke-2 Class ini  , ubahlah  "System.Web.UI.Page" pada web aplikasi kita di inherit ke

class kita yang baru yaitu : PageViewStateZip

Saya dapatkan info ini dari : http://www.hanselman.com/blog/ZippingCompressingViewStateInASPNET.aspx,

 

Share this post: | | | |
Posted: Apr 16 2007, 09:20 AM by agusto | with 7 comment(s)
Filed under: ,

Comments

maulida said:

Cache can be used as a solution of avoid INTENSIVE data loading to DATABASE. Instead of loading data from EXPENSIVE DATABASE CONNECTION every time you need that data, You can use CACHE to store the data to be loaded in other time.

# April 16, 2007 9:07 PM

Muhammad Sudirman said:

Hhhhmmmm... DotNetNuke keren tuh dalam masalah ini.

# April 17, 2007 8:43 AM

agusto said:

To compress the ViewState is one of solution to optimize  at ASP.Net application.

# April 17, 2007 10:51 AM

agusto said:

Hallo Mas Muhammad Sudirman.

Saya belum pernah pake DNN sama sekali, mungkin Mas Sudirman bisa tarik coding nya DNN yang bisa mengoptimalkan web aplikasi dan bisa di gunakan di web aplikasi yang lainnya.

# April 17, 2007 10:56 AM

agusto said:

Other article about compress viewstate with using System.IO.Compression.

Link : http://www.codeproject.com/aspnet/ViewStateCompression.asp

# April 17, 2007 11:01 AM

PlassyIndilia said:

Best reviews of the day about Depression, Essay on teen depression, Depression help ways and Major depression symptoms.

# May 4, 2009 1:00 PM

Intakeinhenna said:

Top rated Denim reviews http://monogata.in/

# May 7, 2009 4:03 AM