Поскольку MemoryStream по сути является байтовым массивом с индексом (и некоторыми другими поддерживающими элементами), очистка байтового массива и сброс индекса могут рассматриваться как сброс и очистка MemoryStream. Если начальным состоянием MemoryStream является обнуленный массив с нулевой позицией, то примером сброса MemoryStream может быть:
public static void Clear(this MemoryStream source)
{
byte[] buffer = source.GetBuffer();
Array.Clear(buffer, 0, buffer.Length);
source.Position = 0;
source.SetLength(0);
}
Неправильно говорить, что только MemoryStream.SetLength сбрасывает или очищает MemoryStream, поскольку SetLength очищает массив внутреннего буфера, только если длина превышает длину текущего буфера.
Реинициализация MemoryStream - это правильный подход, но менее эффективный. Одним из преимуществ повторной инициализации MemoryStream будет гарантия того, что поток никогда не будет закрыт. После закрытия MemoryStream его уже нельзя изменить. Если вы можете быть уверены, что экземпляр MemoryStream не закрыт, то очистка буфера может помочь.