我正在序列化两个int锯齿状数组(int [4096] [4096] x2)。它们的大多数值都是0.但是序列化文件有128MB的NUL值...而且,反序列化这个大对象需要一段时间。在不损害性能的情况下减少文件重量的最佳选择是什么?
我正在使用二进制序列化,我想继续使用它。
答案 0 :(得分:3)
如果反序列化整个对象花费的时间太长,那么瓶颈可能就是磁盘。如果是这种情况,那么您不必担心CPU,您可以使用压缩。
在.Net中使用压缩的最简单方法是使用GZipStream
来包装您正在使用的实际Stream
(很可能是FileStream
)。
这将导致文件较小(特别是如果它包含大量零),但它也会减慢序列化速度。
使用单个4096×4096锯齿状整数数组,其中包含各种零和有或没有压缩,我得到以下结果:
这是使用MemoryStream
,这意味着它几乎只测量CPU开销。如果您要使用FileStream
,差异可能会更小。
正如您所看到的,尺寸可以显着缩小,但时间也会增加很多,特别是对于序列化。