2015-03-18 3 views
0

Мне нужно десериализовать большие файлы, загруженные с Azure Blob Storage.Deserializing большой блочный блок с использованием MemoryStream

Будет ли использовать MemoryStream таким образом, чтобы оптимальный способ десериализации файла в object?

Моей главной задачей здесь является использование ОЗУ.

BinaryFormatter formatter = new BinaryFormatter(); 

using (MemoryStream stream = new MemoryStream()) 
{ 
    blob.DownloadToStream(stream); 
    stream.Position = 0; 
    return formatter.Deserialize(stream); 
} 

Другой вариант - загрузить весь файл в виде массива байтов. Обратите внимание, что эти файлы могут иметь размер до 50 МБ.

EDIT:

Далее от ответа Гийома:

бы тогда это тогда будет более оптимальным при сериализации и загрузки?

BinaryFormatter formatter = new BinaryFormatter(); 
using (var stream = blob.OpenWrite()) 
{ 
    formatter.Serialize(stream, value); 
    blob.UploadFromStream(stream); 
} 

ответ

3

Использование метода CloudBlockBlob.OpenRead для уменьшения давления памяти.

BinaryFormatter formatter = new BinaryFormatter(); 

using (var stream = blob.OpenRead()) 
{ 
    return formatter.Deserialize(stream); 
} 

С MemoryStream, необходимо загрузить весь файл (50Mb) в памяти, и я предполагаю, что внутренний буфер из MemoryStream займет 64mb. Поэтому загрузка его в байтовый массив может использовать меньше памяти, так как емкость массива соответствует его длине. Используя OpenRead, вы не копируете весь файл в памяти перед его обработкой. Он будет принимать размер внутреннего буфера, который будет повторно использоваться при загрузке файла.


Для загрузки, вы можете использовать OpenWrite или UploadFromStream, не использовать оба! OpenWrite потребуется меньше памяти.

BinaryFormatter formatter = new BinaryFormatter(); 
using (var stream = blob.OpenWrite()) 
{ 
    formatter.Serialize(stream, value); 
} 
+0

Отличный ответ - спасибо. См. Мой вопрос относительно сопоставления и выгрузки. – davenewza

+0

Спасибо за обновление даже после того, как я принял ваш ответ! – davenewza