Method 1:
Method 2:
protected override void SavePageStateToPersistenceMedium(object pageViewState) { if (bool.Parse(ConfigurationManager.AppSettings["ViewStateCompressionEnable"] ?? "false")) { Pair pair1; System.Web.UI.PageStatePersister pageStatePersister1 = this.PageStatePersister; Object ViewState; if (pageViewState is Pair) { pair1 = ((Pair)pageViewState); pageStatePersister1.ControlState = pair1.First; ViewState = pair1.Second; } else { ViewState = pageViewState; } LosFormatter mFormat = new LosFormatter(); StringWriter mWriter = new StringWriter(); mFormat.Serialize(mWriter, ViewState); String mViewStateStr = mWriter.ToString(); byte[] pBytes = System.Convert.FromBase64String(mViewStateStr); pBytes = ViewStateCompressor.CompressViewState(pBytes); String vStateStr = System.Convert.ToBase64String(pBytes); pageStatePersister1.ViewState = vStateStr; pageStatePersister1.Save(); } else { base.SavePageStateToPersistenceMedium(pageViewState); } } //// Deserialize view state protected override object LoadPageStateFromPersistenceMedium() { if (bool.Parse(ConfigurationManager.AppSettings["ViewStateCompressionEnable"] ?? "false")) { PageStatePersister pageStatePersister1 = this.PageStatePersister; pageStatePersister1.Load(); String vState = pageStatePersister1.ViewState.ToString(); byte[] pBytes = System.Convert.FromBase64String(vState); pBytes = ViewStateCompressor.DecompressViewState(pBytes); LosFormatter mFormat = new LosFormatter(); Object ViewState = mFormat.Deserialize(System.Convert.ToBase64String(pBytes)); return new Pair(pageStatePersister1.ControlState, ViewState); } else { return base.LoadPageStateFromPersistenceMedium(); } }
public class ViewStateCompressor { public ViewStateCompressor() { } public static byte[] CompressViewState(byte[] uncompData) { using (MemoryStream mem = new MemoryStream()) { CompressionMode mode = CompressionMode.Compress; // Use the newly created memory stream for the compressed data. using (GZipStream gzip = new GZipStream(mem, mode, true)) { //Writes compressed byte to the underlying //stream from the specified byte array. gzip.Write(uncompData, 0, uncompData.Length); gzip.Close(); } return mem.ToArray(); } } public static byte[] DecompressViewState(byte[] compData) { GZipStream gzip; using (MemoryStream inputMem = new MemoryStream()) { inputMem.Write(compData, 0, compData.Length); // Reset the memory stream position to begin decompression. inputMem.Position = 0; CompressionMode mode = CompressionMode.Decompress; gzip = new GZipStream(inputMem, mode, true); using (MemoryStream outputMem = new MemoryStream()) { // Read 1024 bytes at a time byte[] buf = new byte[1024]; int byteRead = -1; byteRead = gzip.Read(buf, 0, buf.Length); while (byteRead > 0) { //write to memory stream outputMem.Write(buf, 0, byteRead); byteRead = gzip.Read(buf, 0, buf.Length); } gzip.Close(); return outputMem.ToArray(); } } } }
No comments:
Post a Comment