Поток действительно должен быть удален, даже если есть исключение (вполне вероятно, для файлового ввода / вывода) - использование предложений - мой любимый подход для этого, поэтому для написания вашего MemoryStream вы можете использовать:
И для чтения обратно:
using (FileStream file = new FileStream("file.bin", FileMode.Open, FileAccess.Read)) {
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
ms.Write(bytes, 0, (int)file.Length);
}
Если файлы большие, то стоит отметить, что операция чтения будет использовать вдвое больше памяти, чем общий размер файла .Одним из решений этой проблемы является создание MemoryStream из байтового массива - следующий код предполагает, что вы не будете выполнять запись в этот поток.
MemoryStream ms = new MemoryStream(bytes, writable: false);
Мои исследования (ниже) показывают, что внутренний буфер такой жебайтовый массив при его передаче, поэтому он должен экономить память.
byte[] testData = new byte[] { 104, 105, 121, 97 };
var ms = new MemoryStream(testData, 0, 4, false, true);
Assert.AreSame(testData, ms.GetBuffer());