Подтвердить что ты не робот

Является вызовом MemoryStream.ToArray() опасно после утилизации?

В приведенном ниже коде есть ли вероятность того, что GC очистит MemoryStream, чтобы ToArray потерпит неудачу, поскольку он находится за пределами инструкции using?

private static byte[] getBytes()
{
    MemoryStream ms = null;

    using (ms = new MemoryStream())
    {
        // ...
    }

    return ms.ToArray();
}
4b9b3361

Ответ 1

Нет, нет никаких шансов на это. Это безопасно делать - MemoryStream сохраняет сильную ссылку на массив байтов.

Я посмотрю, смогу ли я найти документацию о гарантиях...

EDIT: Сортировка...

Из MemoryStream.Close:

Буфер по-прежнему доступен на MemoryStream после закрытия потока.

По общему признанию, это не гарантирует его для Dispose, но задокументировано для вызова Stream.Close.

MemoryStream.Dispose(bool) можно было бы переопределить, чтобы освободить массив, но это не в моем опыте, и это будет изменением в данный момент.