none
请教关于C# 数据压缩的一个问题。 RRS feed

  • 问题

  • List<MyClass>, Dictionary<int, MyClass> 这样的集合对象包含了元素很多时。

    想对其进行压缩处理,请问用什么办法?

     

    2010年5月26日 7:46

答案

全部回复

  • System.IO.Compression 命名空间或者 IEnumerable<T>.Zip() 扩展方法。
    Mark Zhou
    2010年5月26日 9:02
  • 你好!

         我谈谈个人的建议啊!希望对你有帮助啊!

         这些变量占用的都是堆栈控件,还是建议不要保存过多的数据,否则内存占用很大,大量的数据还是应该保存在数据库中为好啊!而不是想办法压缩!


    周雪峰
    2010年5月26日 10:20
    版主
  • 你好!

         我谈谈个人的建议啊!希望对你有帮助啊!

         这些变量占用的都是堆栈控件,还是建议不要保存过多的数据,否则内存占用很大,大量的数据还是应该保存在数据库中为好啊!而不是想办法压缩!


    周雪峰


    周版主,你好。

    情况是这样的。 我后台服务机器的内存是比较大的。现在就是前台客户端调用这个服务方法的时候,要返回这样一个集合对象,当网络不是很好的情况下,就会产生数据超时的情况,

    所以想通过压缩数据后再传输给前台。

    2010年5月27日 1:53
  • 你好!

         压缩的话,你可以使用mazhou提到的那些类,但是压缩比率并不大,所以还是无法解决你的问题!

         你看是否可以分批的传递,不要一次性把所有的元素都传递过来,只传递部分需要的元素!


    周雪峰
    2010年5月27日 3:40
    版主
  • WCF么?首先通过修改配置文件可以改变超时时间,其次默认的XML序列化确实数据量会很大,您可以考虑配置BinaryEncoding使用二进制编码来代替,那样会好一些,或者干脆自己手动先序列化成byte[],然后配置用MTOM编码传递,也会比默认的好些。如果还是不行,我建议您分次传输。另外,如果是内网的话,可以考虑使用NetTcp来传输。
    2010年5月27日 3:41
  • 恩。用的是WCF,超时的时间是不是后台,前台都要设置,一般设置成多长时间啊。半分钟?

    2010年5月27日 8:30
  • 现在使用sharpzip来压缩。
    2010年5月29日 10:53