Десериализация больших файлов с помощью protobuf-net
Мне нужно десериализовать 1,5 ГБ TXT-файл. Я использую protobuf-net с code.google.com/p/protobuf-net/
Иногда происходит сбой (около 50% случаев) с разными исключениями (нулевая ссылка, нарушение доступа к памяти) в разных местах. Я заметил, что если процессор загружен слабо, то вероятность сбоя уменьшается.
Что я должен сделать, чтобы избежать таких сбоев?
Вот пример десериализации кода:
public static History LoadFromFile(string path)
{
using (var fileStream = File.OpenRead(path))
{
var obj = Serializer.Deserialize<History>(fileStream);
return obj;
}
}
Сегодня у меня есть ошибка FatalExecutionEngineError с кодом ошибки 0xc0000005, но я не могу понять, какая часть кода небезопасна. Это не постоянная ошибка, все работает правильно после перезапуска приложения.
Вот пример файлов с сериализацией, которые мне нужно десериализовать: https://docs.google.com/file/d/0B1XaGInC6jg3ZXBZZDA3bHh3bVk/edit
1 ответ
Google:
Буферы протокола не предназначены для обработки больших сообщений. Как правило, если вы работаете с сообщениями размером более одного мегабайта, возможно, пришло время рассмотреть альтернативную стратегию. Тем не менее, буферные протоколы отлично подходят для обработки отдельных сообщений в большом наборе данных.