An object going out of scope does not result in it immediately being garbage collected.
Your program would have to wait, potentially a very very long time, for the next garbage collection in order for the StreamWriter to be freed. Until that time the file would be locked.
Dispose() is there so you can explicitly release the object. I would recommend using a using {} block though.