【发布时间】:2010-10-29 17:31:18
【问题描述】:
当我使用 BinaryFormatter 序列化 Int32 数组时,我得到大约 400MB/s(一秒内 1 亿个项目),但是当我尝试序列化 DateTime 数组时,我只得到大约 27MB/s 的吞吐量(30 秒内 1 亿个项目)。一个 DateTime 以序列化形式占用 8 个字节。我猜 BinaryFormatter 使用 ISerializable 接口,如果它实现了,所以我看了一下 DateTime 类型的 GetObjectData 实现:
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
}
我很困惑将 UInt64 和 Int64 添加到输出中,总和应该是 16 个字节,但这并不反映我的措施。那么 DateTime 是如何真正序列化为二进制的呢?
【问题讨论】:
标签: c# arrays datetime serialization binary