【问题标题】:Entity Framework data compression实体框架数据压缩
【发布时间】:2012-02-03 12:01:51
【问题描述】:

我有一个 WCF Windows 服务,它通过压缩数据集向 250 多个 PDA 提供数据,并希望重新开发服务和移动应用程序以使用 Entity Framework 4.x 模型。

为了在 PDA 上发送/接收数据时保持可接受的性能,我需要保持数据大小尽可能小,并且想知道是否可以从 WCF Windows 服务压缩 IEnumerable?

根据之前对数据集的经验,我获得了 80% +/- 的压缩率,甚至在 PDA 上解压缩数据也实现了 50% 的整体性能导入,因此保持相似的性能水平至关重要。

编辑: 我可以使用二进制序列化器然后压缩流吗? As shown here

【问题讨论】:

  • 为什么不用浏览器和IIS支持的GZip压缩呢?这样您就不必在应用程序中执行任何操作。
  • 如果我要在 IIS 中托管 WCF 服务但希望保留 Windows 服务,我可以使用它。

标签: .net vb.net entity-framework compression


【解决方案1】:

如果您不能使用内置的 IIS GZip 功能,那么您可以随时手动操作,例如

public static byte[] Compress(this IEnumerable<T> list)
{
    using (var stream = new MemoryStream())
    {
        using (var zip = new GZipStream(stream, CompressionMode.Compress, true))
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(zip, list);
        }
        return stream.ToArray();
    } 
}

然后让您的 WCF 方法返回一个字节数组,然后您可以在客户端解压缩和反序列化。

上面的代码是一个扩展方法,所以你基本上可以直接调用return myList.Compress()

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    相关资源
    最近更新 更多