关于缓存数据的应用

并不是所有客户都允许我们写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包

posted on 2006-08-06 02:00  sdav  阅读(2024)  评论(15编辑  收藏  举报

导航