Когда я сериализую массив Int32 с использованием BinaryFormatter, я получаю около 400 МБ/с (100 миллионов элементов за одну секунду), но когда я пытаюсь сериализовать массив DateTime, я получаю только пропускная способность около 27 МБ/с (100 миллионов единиц за 30 секунд). Одна DateTime занимает восемь байтов в сериализованной форме. Я предполагаю, что BinaryFormatter использует интерфейс ISerializable, если его реализовать, так что мне пришлось взглянуть на реализацию GetObjectData типа DateTime:Двоичная сериализация массива 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, поэтому нет ввода-вывода. – Rauhotz
ОК, поэтому вы не связаны с I/O, но сериализация DateTime, по-видимому, занимает 30 раз больше, чем int. –