Десериализация больших файлов с помощью 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:

Буферы протокола не предназначены для обработки больших сообщений. Как правило, если вы работаете с сообщениями размером более одного мегабайта, возможно, пришло время рассмотреть альтернативную стратегию. Тем не менее, буферные протоколы отлично подходят для обработки отдельных сообщений в большом наборе данных.

Ссылка на источник

Другие вопросы по тегам