Я хочу спросить о сериализации/десериализации объекта с бинарным форматированием. ну, я пытаюсь десериализовать объект в FileStream, который содержит много объектов, которые были сериализованы один за другим. Размер объекта слишком велик, чтобы быть сохраненным в памяти процессов, поэтому я не собираю все объекты в одном, например: Список, потому что они слишком большие в памяти процесса. Поэтому я сериализую столько, сколько необходимо во много раз , таким образом, это не займет много памяти процессов, потому что я просто обрабатываю один объект поочередно не всеми объектами. взгляните на эскизе, что я имею в видуBinary Formatter, Установить позицию для десериализации конкретного объекта
<FileStream>
----Object 1-----Size = 100 Mb------index = 0
----Object 2-----Size = 100 Mb------index = 1
----Object 3-----Size = 100 Mb------index = 2
----Object 4-----Size = 100 Mb------index = 3
----Object 5-----Size = 100 Mb------index = 4
----Object 6-----Size = 100 Mb------index = 5
</FileStream>
объект Сериализации также успешно в настоящее время я получил проблему десериализованного объекта. вот в чем проблема: in Список мы можем взять товар с индексом. поэтому, если мы хотели взять пятый индекс, мы можем назвать его, например, как:
List<object> list = new List<object>();
list(0) = "object1";
list(1) = "object2";
list(2) = "object3";
list(3) = "object4";
list(4) = "object5";
list(5) = "object6";
object fifthIndex = list[5]; // here we can get item based index
Ну теперь проблема в том, как я могу получить объекты с пятым индексом так же, как Список Method на шесть объекте десериализации в FileStream с бинарным форматированием. я знаю, что в FileStream есть свойство, которое называется FileStream.Position, но оно не похоже на Index, оно выглядит как случайное число, когда я десериализую/сериализую объект. возможно, это увеличит случайное число.
на самом деле я преуспели в этом, но я держал пари, что это не лучший способ взглянуть на мой код, который я когда-либо пробовал:
object GetObjectStream(FileStream fs, int index)
{
if (fs != null)
{
BinaryFormatter binaryformatter = new BinaryFormatter();
bool isFinished = false; int count = 0;
while (isFinished == false)
{
try
{
object objectdeserialized = binaryformatter.Deserialize(fs);
if (count == index) return objectdeserialized;
count++;
}
catch
{
isFinished = true;
return null;
}
}
}
return null;
}
эти коды будут «Еогеасп» каждый объект, который был сериализован, а затем десериализован каждый объект. Я ставлю, что мои коды не лучший способ, потому что для десериализации объекта, который содержит 100 МБ, может быть, это займет много времени, я даже не знаю, что объект, кроме индекса, который когда-либо будет десериализован, будет удален или нет? Я хочу, чтобы метод был как «Сериализационный прыжок».
Ваш ответ очень полезен и полезен для меня, если мы сможем решить эту проблему.
Благодаря раньше ..
Показать код, который сериализует список. –
@DarinDimitrov serializing Объект списка, который я имею в виду: binaryformatter.Serialize (новый список
Но если у вас есть много элементов в списке, как они вписываются в память? Я думал, что это была ваша проблема в первую очередь - нехватка памяти, потому что список слишком велик. –