I can see the large ViewState in html source code, so if you can compress ViewState the performance will be improved a bit.
protected override void SavePageStateToPersistenceMedium(object state)
{
LosFormatter formatter = new LosFormatter();
StringWriter writer = new StringWriter();
//write uncompressed viewstate
formatter.Serialize(writer, state);
//get uncompressed viewstate as string
string viewState = writer.ToString();
//convert uncompressed viewstate into byte[]
byte[] data = Convert.FromBase64String(viewState);
//get compressed data
byte[] compressedData = ViewStateHelper.Compress(data);
//convert compressed byte[] into string
string str = Convert.ToBase64String(compressedData);
ClientScript.RegisterHiddenField("__MYVIEWSTATE", str);
}
protected override object LoadPageStateFromPersistenceMedium()
{
//get compressed viewstate
string viewstate = Request.Form["__MYVIEWSTATE"];
//convert to byte[]
byte[] data = Convert.FromBase64String(viewstate);
//decompress data
byte[] uncompressedData = ViewStateHelper.Decompress(data);
//convert byte[] to base64 string
string str = Convert.ToBase64String(uncompressedData);
LosFormatter formatter = new LosFormatter();
return formatter.Deserialize(str);
}
using System.IO;
using System.IO.Compression;
public class ViewStateHelper
{
public static byte[] Compress(byte[] data)
{
MemoryStream ms = new MemoryStream();
GZipStream stream = new GZipStream(ms, CompressionMode.Compress);
stream.Write(data, 0, data.Length);
stream.Close();
return ms.ToArray();
}
public static byte[] Decompress(byte[] data)
{
MemoryStream ms = new MemoryStream();
ms.Write(data, 0, data.Length);
ms.Position = 0;
GZipStream stream = new GZipStream(ms, CompressionMode.Decompress);
MemoryStream temp = new MemoryStream();
byte[] buffer = new byte[1024];
while (true)
{
int read = stream.Read(buffer, 0, buffer.Length);
if (read <= 0)
{
break;
}
else
{
temp.Write(buffer, 0, buffer.Length);
}
}
stream.Close();
return temp.ToArray();
}
}