如何使用gzip压缩.net对象实例

Mat*_*ers 5 .net c# compression asp.net caching

我想在将数据库的QUERYS添加到缓存之前压缩结果.

我希望能够压缩任何引用类型.

我有一个用于压缩字符串的工作版本..这个想法基于scott hanselman的博客文章http://shrinkster.com/173t

任何压缩.net对象的想法?

我知道它将是一个只读缓存,因为缓存中的对象只是字节数组.

Meh*_*ari 20

这不适用于任何参考类型.这适用于Serializable类型.挂钩一个BinaryFormatter到被管道输送到一个文件中的压缩流:

var formatter = new BinaryFormatter();
using (var outputFile = new FileStream("OutputFile", FileMode.CreateNew))
using (var compressionStream = new GZipStream(
                         outputFile, CompressionMode.Compress)) {
   formatter.Serialize(compressionStream, objToSerialize);
   compressionStream.Flush();
}
Run Code Online (Sandbox Code Playgroud)

您可以使用a MemoryStream来保存内存中的内容,而不是写入文件.但我怀疑这对缓存来说真的是一个有效的解决方案.