服务器端控件带来的好外我在这就不多说了,但多过的使用服务器端件保存控件的状态会带来大量的ViewState的情况大家一定遇到过吧.过多的ViewState会很大程度上降低页面的加载速度制成服务器端的性能下降.
以下是结合CSharpZipLib对ViewState进行压缩的方法.
MSPlus.Web.UI.Page 源码:

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%!
更多内容请看压缩软件专题、.NET移动与嵌入式技术、.NET开发手册专题,或进入讨论组讨论。
以下是结合CSharpZipLib对ViewState进行压缩的方法.
MSPlus.Web.UI.Page 源码:
using System;
使用方法(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
URL查看 http://www.qqread.com/aspdotnet/b379728.html 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
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 压缩软件专题 (741篇文章)
- .NET移动与嵌入式技术 (5974篇文章)
- .NET开发手册 (5673篇文章)
- ASP.NET教程 (8471篇文章)
- ASP.NET应用篇 (2641篇文章)
- Out Of Memory的分析及诊断方法 (0次浏览)
- 未释放事件Handler可能导致内存泄漏 (0次浏览)
- 小心使用放在App_Code中类的静态成员 (0次浏览)
- ASP.net服务器控件的优化选择 (0次浏览)
- Asp.Net中动态页面转静态页面 (0次浏览)
- 正则表达式中的实用命名组替换 (0次浏览)
- Domain Model的三种类型及其级别 (0次浏览)
- 应用WEB标准会使ScrollTop属性失效! (0次浏览)
- Cache用法之缓存页面和缓存数据 (0次浏览)
- 支持正则表达式的UrlMapping (0次浏览)



