关于缓存数据的应用
并不是所有客户都允许我们写Cookie的,而且Session太小,不能存放大数据,那我们怎么办呢?
在CSDN上逛了一下午,泡了一晚上,也没找到解决办法,结果一个老兄说了一个异想天开的办法---压缩!
呵呵,好办法!真是好办法!
说干就干,偶就要写个压缩类,专门针对数据太大而Session太小而做个小东西,呵呵
private static Int32 LimitLength = 1096;
private static Int32 ZipLevel = ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION;
/**//// <summary>
/// 对对象进行压缩,这里引用了Mack.Z的程序
/// </summary>
/// <param name="pViewState">压缩对象</param>
/// <returns>返回流的字节数组</returns>
public static Byte[] Compress(String pViewState)
{
//将存储状态的Base64字串转换为字节数组
Byte[] pBytes = System.Convert.FromBase64String(pViewState);
//创建支持内存存储的流
MemoryStream mMemory = new MemoryStream();
Deflater mDeflater = new Deflater(ZipLevel);
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(String pViewState)
{
//将Base64字符串转换为字节数组
Byte[] pBytes = System.Convert.FromBase64String(pViewState);
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();
}
在这里Mack.Z的程序引用了 using ICSharpCode.SharpZipLib.Zip.Compression;
也顺便传上来,程序函数是传入的字符型,大家可以自己修改修改,呵呵,这样,不管多大对象,我们都要把它压压!哈哈快多了,不过服务器配置相对要求高了,呵呵
套用以前看到的一句话:先让程序稳定,再去考虑优化,呵呵
这里是ICSharpCode.SharpZipLib包
在CSDN上逛了一下午,泡了一晚上,也没找到解决办法,结果一个老兄说了一个异想天开的办法---压缩!
呵呵,好办法!真是好办法!
说干就干,偶就要写个压缩类,专门针对数据太大而Session太小而做个小东西,呵呵
private static Int32 LimitLength = 1096;
private static Int32 ZipLevel = ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION;
/**//// <summary>
/// 对对象进行压缩,这里引用了Mack.Z的程序
/// </summary>
/// <param name="pViewState">压缩对象</param>
/// <returns>返回流的字节数组</returns>
public static Byte[] Compress(String pViewState)
{
//将存储状态的Base64字串转换为字节数组
Byte[] pBytes = System.Convert.FromBase64String(pViewState);
//创建支持内存存储的流
MemoryStream mMemory = new MemoryStream();
Deflater mDeflater = new Deflater(ZipLevel);
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(String pViewState)
{
//将Base64字符串转换为字节数组
Byte[] pBytes = System.Convert.FromBase64String(pViewState);
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();
}
在这里Mack.Z的程序引用了 using ICSharpCode.SharpZipLib.Zip.Compression;
也顺便传上来,程序函数是传入的字符型,大家可以自己修改修改,呵呵,这样,不管多大对象,我们都要把它压压!哈哈快多了,不过服务器配置相对要求高了,呵呵
套用以前看到的一句话:先让程序稳定,再去考虑优化,呵呵
这里是ICSharpCode.SharpZipLib包