使用字符串变量时,是否需要在C#中显式关闭StreamReader?

时间:2012-10-14 09:10:59

标签: c#

这是我的代码:

string data = "...";
var stream = new StreamReader(data);

可以不调用Close()方法吗?

4 个答案:

答案 0 :(得分:5)

是的,否则你会有内存泄漏。将StreamReader包裹在using statement中,这样您就不用担心要清理它了。

using (var reader = StreamReader(data))
{
    ...
}

答案 1 :(得分:1)

您是否真的编译并运行过代码?

StreamReader(string) constructor将输入视为文件名!

除非这不是您的代码,并且意味着 StringReader,否则您的代码会尝试流式传输data中指定的文件名的内容,这很可能抛出FileNotFoundException,因为该文件可能不存在。如果确实如此,您肯定需要调用Close或将代码集成到using语句中以释放文件句柄。

答案 2 :(得分:0)

您可能还想看一下msdn上的本教程:
http://msdn.microsoft.com/en-us/library/aa355056.aspx

告诉您有关using语句需要注意的事项。除此之外,使用是要走的路。

codeProject上另一个漂亮的good article。值得阅读。

答案 3 :(得分:0)

在您的进程停止使用之前,其他进程将无法访问该资源,因此如果您不需要它,请关闭它