У меня есть список из примерно 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, но все поля инициализируются значениями по умолчанию.
Как правильно десериализовать поток, содержащий список объектов, которые не сериализованы как список?