當我使用BinaryFormatter對Int32數組進行序列化時,我獲得了大約400MB/s(1秒內有1億個項目),但是當我嘗試序列化一個DateTime數組時,吞吐量約爲27MB/s(30秒內1億個項目)。一個DateTime以序列化形式佔用八個字節。我猜測,BinaryFormatter的使用ISerializable接口,如果實現的,所以我不得不看看GetObjectData使用實施時間類型:DateTime數組的二進制序列化
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如何真正序列化爲二進制?
測量是通過序列化到MemoryStream來完成的,所以沒有I/O。 – Rauhotz 2009-05-28 22:04:18
好的,所以你不是I/O綁定的,但是序列化DateTime顯然比int要長30倍。 – 2009-05-28 22:21:15