У меня есть решение, где мне нужно быстро считывать объекты в память, однако бинарный поток может быть кэширован в памяти, чтобы сэкономить время на диске io.Параллельная двоичная десериализация?
Я искал разные решения, очевидно, XmlTextWriter и XmlTextReader не были настолько хороши, и ни одна из них не была встроенной двоичной сериализацией. Protobuf-net отлично, но все же немного медленнее. Вот некоторые статистические данные:
Размер файла XML: 217 кб
Размерфайла Binary: 87 кб
Сжатый Бинарные: 26 KB
Сжатый XML: 26 KB
Deserialize с XML (XmlTextReader): 8.4 сек.
Deserialize with Binary (Protobuf-net): 6.2 sek
Deserialize с Binary горе string.interning (Protobuf-нетто): 5,2 сек
Deserialize с Binary Из памяти: 5,9 Сек
Время для распаковки двоичного файла в память: 1.8 Сек
Serialize With Xml (XmlTextWriter): 11 сек
Сериализация с двоичным (Protobuf): 4 сек
Сериализация с двоичным префикс длины (Protobuf-нетто): 3,8 сек
Это заставило меня подумать, кажется (верьте мне, если я ошибаюсь), что основным виновником десериализации является фактическое преобразование байта, а не IO. Если это так, то это должен быть кандидат на использование новых параллельных расширений.
Поскольку я немного новичок, когда речь идет о двоичном IO я оценил бы некоторый входной сигнал, прежде чем я посвящаю время решения, хотя :)
Для простоты предположим, что мы хотим, чтобы десериализации список объектов без дополнительного поля. Моя первая идея состояла в том, чтобы просто сохранить каждый префикс длины. Прочитайте байт [] каждого в список байтов [] и используйте PLINQ для выполнения байта [] -> десериализации объекта.
Однако с этим методом мне все же нужно прочитать байта [] однократно, поэтому, возможно, можно было бы прочитать весь двоичный поток в памяти (насколько большие бинарные файлы возможны для этого btw?) И в начале двоичного кода вместо этого сохраните количество объектов и каждую их длину и смещение. Тогда я должен был бы просто создать ArraySegments или что-то еще и сделать chunking в paralllel тоже.
Так что вы, ребята, думаете, это возможно?
Извините, некоторые вопросы Я действительно не получил определенного ответа, но в начале я просто не понял, чтобы установить его. Урок выучил и спасибо, указав это. Кажется, вы не можете ответить на старые вопросы, хотя я чего-то не хватает? – Homde
В поддержку Алона, этот вопрос о сопоставлении строки java string, который вы опубликовали, имел некоторые замечательно хорошо продуманные ответы ... –
Согласен, как мне задать правильный ответ? – Homde