压缩ASP.NET中的ViewState
来源:互联网 发布:网络诈骗的方式有哪些 编辑:程序博客网 时间:2024/05/03 17:34
服务器端控件带来的好外我在这就不多说了,但多过的使用服务器端件保存控件的状态会带来大量的ViewState的情况大家一定遇到过吧.过多的ViewState会很大程度上降低页面的加载速度制成服务器端的性能下降.
以下是结合CSharpZipLib对ViewState进行压缩的方法.
MSPlus.Web.UI.Page 源码:
使用方法(ASPX.CS页面继承MSPlus.Web.UI.Page):public class PageClass : System.Web.UI.Page
测试下来的结果:压缩后的ViewState只有原来的20%!
以下是结合CSharpZipLib对ViewState进行压缩的方法.
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();
}
}
}
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页面继承MSPlus.Web.UI.Page):public class PageClass : System.Web.UI.Page
测试下来的结果:压缩后的ViewState只有原来的20%!
我作了一个小小的测试.先后用同一个页面加密和不加密的情况下,刷新页面观测w3wp.exe的CPU占用情况.此页面的ViewState大小为3.996 Bytes
w3wp.exe 以下是每次刷新的时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
w3wp.exe 以下是每次刷新的时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
- 压缩ASP.NET中的ViewState
- 压缩ASP.NET中的ViewState
- 压缩ASP.NET中的ViewState的方法
- ASP.NET中的ViewState
- ASP.NET中的ViewState
- ASP.NET中的ViewState
- ASP.NET中的ViewState
- ASP.NET中的ViewState
- ASP.NET 中的 ViewState
- ASP.NET中的ViewState
- ASP.NET中的ViewState
- ASP.NET中的ViewState
- 压缩ASP.NET中的ViewState的超强改进方法
- 压缩ASP.NET中的ViewState的超强改进方法
- ASP.NET中的viewstate使用
- ASP.NET 中的 ViewState <转>
- Asp.net中的ViewState用法
- ASP.net中的viewstate属性
- 人生目标
- 流氓软件及反流氓软件的技术分析
- 中国式成功宝典
- DatePicker
- 这些东西
- 压缩ASP.NET中的ViewState
- here are some very good songs for you learn....
- .net平台 基于 XMPP协议的即时消息服务端简单实现
- 做产品之前要想的一些事
- 使用MFC开发ActiveX控件
- ASP.NET中自定义提示对话框
- 再谈“国人为什么这么轻视技术”
- 谁动了项目的时间?
- 谈物流的真正含义以及未来的从业方向