Is it always necessary to close streams or, because .net is managed code, will it be closed automatically as soon as it drops out of scope (assuming there are no exceptions
.Net's GC is very... lazy. Just because a reference has been lost doesn't mean it's immediately swept up, crushed and sent to the landfill. It's always a good idea to close open resources and to dispose of objects that implement IDisposable for that very reason.