BinaryFormatterを使用してInt32の配列をシリアル化すると、約400MB /秒(1秒で1億のアイテム)が得られますが、DateTimeの配列をシリアル化しようとすると、スループットは約27MB/s(30秒で1億項目)。 1つのDateTimeはシリアル化された形式で8バイトを占有します。私はそのが実施された場合にBinaryFormatterは、ISerializableインターフェイスを使用していることを推測するので、私はのDateTime型の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
OK、I/Oバインディングではないですが、DateTimeのシリアル化は明らかにintより30倍長くなります。 –