Wenn ich ein Array von Int32 mit dem BinaryFormatter serialisieren, bekomme ich ca. 400MB/s (100 Millionen Elemente in einer Sekunde), aber wenn ich versuche, ein Array von DateTime zu serialisieren, bekomme ich nur ein Durchsatz von etwa 27 MB/s (100 Millionen Artikel in 30 Sekunden). Ein DateTime belegt acht Bytes in serialisierter Form. Ich denke, dass die BinaryFormatter die ISerializable-Schnittstelle verwendet, wenn seine implementiert, so hatte ich einen Blick auf die GetObjectData Umsetzung des Datetime-Typ:Binäre Serialisierung eines Array von 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);
}
Ich bin verwirrt, dass ein UInt64 und ein Int64 mit dem Ausgang hinzugefügt werden, Das sollte 16 Bytes in der Summe sein, aber das spiegelt nicht meine Maße wider. Also, wie wird DateTime wirklich zu binär serialisiert?
Messungen wurden durch Serialisierung zu einem MemoryStream durchgeführt, also keine I/O. – Rauhotz
OK, Sie sind also nicht an E/A gebunden, aber das Serialisieren der DateTime dauert anscheinend 30x länger als Int. –