Compress the viewstate Information






4.43/5 (3 votes)
How to compress viewstate information of your aspx page
Introduction
This tip discusses how to compress the viewstate information of your aspx page if needed.
Using the Code
- Create the following
Compressor
class in your project. - Override the two methods -
LoadPageStateFromPersistenceMedium()
andSavePageStateToPersistenceMedium(object viewState)
in your cs file.
// Create the following class file in your project which is used // to compress and decompress the viewstate info using System; using System.IO; using System.IO.Compression; public static class Compressor { public static byte[] Compress(byte[] data) { MemoryStream output = new MemoryStream(); GZipStream gzip = new GZipStream(output,CompressionMode.Compress, true); gzip.Write(data, 0, data.Length); gzip.Close(); return output.ToArray(); } public static byte[] Decompress(byte[] data) { MemoryStream input = new MemoryStream(); input.Write(data, 0, data.Length); input.Position = 0; GZipStream gzip = new GZipStream(input,CompressionMode.Decompress, true); MemoryStream output = new MemoryStream(); byte[] buff = new byte[64]; int read = -1; read = gzip.Read(buff, 0, buff.Length); while (read > 0) { output.Write(buff, 0, read); read = gzip.Read(buff, 0, buff.Length); } gzip.Close(); return output.ToArray(); } }
// Override the two Methods protected override object LoadPageStateFromPersistenceMedium() { string viewState = Request.Form["__VSTATE"]; byte[] bytes = Convert.FromBase64String(viewState); bytes = Compressor.Decompress(bytes); LosFormatter formatter = new LosFormatter(); return formatter.Deserialize(Convert.ToBase64String(bytes)); } protected override void SavePageStateToPersistenceMedium(object viewState) { LosFormatter formatter = new LosFormatter(); StringWriter writer = new StringWriter(); formatter.Serialize(writer, viewState); string viewStateString = writer.ToString(); byte[] bytes = Convert.FromBase64String(viewStateString); bytes = Compressor.Compress(bytes); ScriptManager.RegisterHiddenField(updPnl, "__VSTATE", Convert.ToBase64String(bytes)); }