Когда я сериализую массив 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 действительно сериализуется в двоичный код?