Когда я сериализирую массив Int32 с помощью BinaryFormatter, я получаю около 400 МБ / с (100 миллионов элементов в секунду), но когда я пытаюсь сериализовать массив DateTime, я получаю только пропускную способность около 27 МБ / с (100 миллионов предметов за 30 секунд). Один 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 действительно сериализуется в двоичный файл?