2009-05-28 2 views
1

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

ответ

0

Похоже, что вы привязаны к I/O на вашей сериализации, но вы привязаны к ЦП, связанным с сериализацией DateTime (для сериализации DateTime требуется значительно больше времени процессора, чем для сериализации int). Следовательно, ваши измерения не будут отражать точное соотношение между двумя вашими типами данных.

+0

Измерения выполнялись путем сериализации в MemoryStream, поэтому нет ввода-вывода. – Rauhotz

+0

ОК, поэтому вы не связаны с I/O, но сериализация DateTime, по-видимому, занимает 30 раз больше, чем int. –

0

Это будет больше, чем 16 байт, так как он также должен хранить ключи.

Вы можете сериализовать тики самостоятельно (напрямую)? В качестве альтернативы; Я не тестировал его в этом сценарии, но вы могли бы дать protobuf-net вихрь (это высокопроизводительный двоичный механизм сериализации).

+0

100 миллионов DateTimes дает мне длину потока ~ 800 МБ, поэтому BinaryFormatter, похоже, хранит что-то вроде тиков, но, к сожалению, довольно медленно. – Rauhotz

+0

Интересно; он должен иметь специальную обработку ... любопытно, что это так медленно .. –

Смежные вопросы