Как сериализовать / десериализовать большой список элементов с помощью protobuf-net

У меня есть список из примерно 500 миллионов элементов. Я могу сериализовать это в файл с файлом protobuf-net, если я серьезно преобразовывать отдельные элементы, а не список - я не могу собрать элементы в прейскуранте, а затем сериализовать, потому что у меня заканчивается память. Итак, я должен сериализовать по одной записи за раз:

using (var input = File.OpenText("..."))
using (var output = new FileStream("...", FileMode.Create, FileAccess.Write))
{
    string line = "";
    while ((line = input.ReadLine()) != null)
    {
        Price price = new Price();
        (code that parses input into a Price record)

        Serializer.Serialize(output, price);
    }
}

Мой вопрос касается части десериализации. Похоже, что метод Deserialize не перемещает позицию потока к следующей записи. Я попробовал:

using (var input = new FileStream("...", FileMode.Open, FileAccess.Read))
{
    Price price = null;
    while ((price = Serializer.Deserialize<Price>(input)) != null)
    {
    }
}

Я вижу одну реально выглядящую запись Price, а остальные - пустые записи - я возвращаю объект Price, но все поля инициализируются значениями по умолчанию.

Как правильно десериализовать поток, содержащий список объектов, которые не сериализованы как список?

10
задан user1044169 25 November 2011 в 17:18
поделиться