我有一个任务是花费数百万个浮点数并将它们以5,000个批量存储在数据库中,作为二进制文件.这迫使我学习有关序列化性能的有趣事情.
令我惊讶的一件事是序列化数据的大小,比我预期的要高十倍.这个测试向我展示了一个四字节的浮点数被串行化为55个字节,一个8字节的双精度数转换为59个字节.
这里发生了什么?我希望它简单地将浮点值分成四个字节.其他51个字节是什么?
private void SerializeFloat()
{
Random rnd = new Random();
IFormatter iFormatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream(10000000))
{
memoryStream.Capacity = 0;
iFormatter.Serialize(memoryStream, (Single)rnd.NextDouble());
iFormatter.Serialize(memoryStream, rnd.NextDouble());
}
}
Run Code Online (Sandbox Code Playgroud)
序列化不仅仅是将比特和字节串联到流中.序列化是结构化输出.此结构可以解释您的实际差异.该框架对其他信息进行编码,使其了解序列化数据中对象的类型和数量,以及许多其他可能性.这是一个最好的实施细节.
如果您需要非结构化输出,你可以使用BinaryWriter代替.
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |