Когда вы используете объект, который обращается к неуправляемым ресурсам, например StreamWriter, хорошей практикой является создание экземпляра с помощью оператора using. Оператор using автоматически закрывает поток и вызывает Dispose на объекте, когда код, который его использует, завершил.
Ответ 2
При использовании потока памяти в операторе using мне нужно вызвать close?
Нет, вам не нужно. Он будет вызван методом .Dispose(), который автоматически вызывается:
using (MemoryStream ms = new MemoryStream(byteArray))
{
// stuff
}