你是否应该在使用块内调用close

Dea*_*ean 2 vb.net

Using sr As New System.IO.StreamWriter("C:\test.txt")
   sr.WriteEnd
End Using
Using sr As New System.IO.StreamReader("C:\test.txt")
   sr.ReadToEnd
End Using
Run Code Online (Sandbox Code Playgroud)

这相当于:

sr = New System.IO.StreamWriter("C:\test.txt")
sr.WriteEnd
sr.Dispose
sr = New System.IO.StreamReader("C:\test.txt")
sr.ReadToEnd
sr.Dispose
Run Code Online (Sandbox Code Playgroud)

我是否正确地说,如果垃圾收集器没有处理StreamWriter并关闭文件,则尝试读取文件可能会失败.如果是这样,那么在这种情况下使用Using语句的好处在哪里.是更好的练习使用

Using sr As New System.IO.StreamWriter("C:\test.txt")
       sr.WriteEnd
sr.close()
    End Using
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

始终使用该Using语句是最佳实践,因为如果在读取期间抛出异常,则可能永远不会处理该流,并且您的应用程序将泄漏文件句柄.如果这是一个桌面应用程序,该进程可能会死并释放句柄,但在Web应用程序中不释放非托管资源(如文件句柄)可能是灾难性的.

Close如果您正在通话,也无需呼叫您的信息流Dispose.

备注:如果您想将文本文件的内容读入字符串,您可以直接执行此操作,而不是经历实例化StreamReader的痛苦,将其读取到最后并将其处理:

Dim data = File.ReadAllText("C:\test.txt");
Run Code Online (Sandbox Code Playgroud)