Csharp/C#教程:从数据集中获取byte 并压缩分享


从数据集中获取byte 并压缩

我从WCF操作返回一个自定义类。 使用的绑定是netTcp。 此自定义类包含多个数据成员。 其中之一是数据集。 根据特定操作,数据集可能很大。 我打算将数据集压缩为字节,然后返回自定义类。

根据读数,我提出了以下代码来从数据集返回压缩字节。 但不确定这是否是最佳方式(或正确的方法)。 你的想法。 ??

byte[] bytes = null; byte[] compressedBytes = null; using(var memory = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(memory, ds); bytes = memory.ToArray(); } using(var memory = new MemoryStream()) { using(var gzip = new GZipStream(memory, CompressionMode.Compress, true)) { gzip.Write(bytes, 0, bytes.Length); compressedBytes = memory.ToArray(); } } return compressedBytes; 

节省空间有一个重要的步骤:

 ds.RemotingFormat = SerializationFormat.Binary; 

否则它内部使用xml,甚至通过BinaryFormatter 。 有了这个,你也可以包括gzip,但收益并不那么重要。 碰巧我有一些统计数据来比较这里 ; 将数据复制到:

 DataTable (xml) (vanilla) 2269ms/6039ms 64,150,771 bytes DataTable (xml) (gzip) 4881ms/6714ms 7,136,821 bytes DataTable (xml) (deflate) 4475ms/6351ms 7,136,803 bytes BinaryFormatter (rf:binary) (vanilla) 2006ms/3366ms 11,272,592 bytes BinaryFormatter (rf:binary) (gzip) 3332ms/4267ms 8,265,057 bytes BinaryFormatter (rf:binary) (deflate) 3216ms/4130ms 

但是: DataSet 不是一种非常WCF的做事方式。 我会添加标准的OO类,并将序列化器交换为protobuf-net ,它比DataContractSerializerNetDataContractSerializer 小得多 。

您可以使用以下内容:

上述就是C#学习教程:从数据集中获取byte 并压缩分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  using(var memory = new MemoryStream()) { using(var gzip = new GZipStream(memory, CompressionMode.Compress, true)) { var formatter = new BinaryFormatter(); formatter.Serialize(gzip, ds); } return memory.ToArray(); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/949288.html

(0)
上一篇 2021年11月17日
下一篇 2021年11月17日

精彩推荐