5

我有一个锯齿状数组DataMember,它返回byte[800][10000][1]转换为约 8MB 的数据。当使用DataContractSerializer它进行序列化时,二进制文件大小为 120MB,文本文件大小为 300MB。查看文本序列化,它表明它在每个字节值周围放置了一个标签,以表明它是一个 base64 编码值等,这可能是这种大小放大的原因。

DataContractSerializer使用(或任何其他序列化程序)序列化大型锯齿状blob的有效方法是什么?

使用 Text 序列化时的片段 XML 输出:

<a:ArrayOfbase64Binary><a:base64Binary>CQ==</a:base64Binary><a:base64Binary>Bw==</a:base64Binary><a:base64Binary>BQ==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AQ==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>BA==</a:base64Binary><a:base64Binary>Bg==</a:base64Binary><a:base64Binary>CA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary>
4

1 回答 1

5

BinaryFormatter如果您不关心与其他系统的互操作性而只关心性能,您可以尝试使用:

byte[800][10000][1] foo = ... fetch it
BinaryFormatter formatter = new BinaryFormatter();
using (var stream = File.OpenWrite("foobar.dat"))
{
    formatter.Serialize(stream, foo);
}
于 2013-02-15T21:19:52.347 回答