如果由于Using
未实施而无法使用IDisposable
,以下代码是With
/ End With
的正常做法吗?这会导致内存泄漏还是更好的设置实例变量然后将其设置为空?
With New System.IO.FileInfo(sFileName)
' Do some work
End With
答案 0 :(得分:3)
With关键字 nothing 与IDisposable或Using关键字有关。这只是一个方便的快捷方式,可以避免输入对象引用的名称。
With New System.IO.FileInfo(sfilename)
Console.WriteLine(.Length) '' note the dot without an object reference
'' etc..
End With
与以下内容相同:
Dim info = New System.IO.FileInfo(sfilename)
Console.WriteLine(info.Length)
'' etc..
由于FileInfo没有实现IDisposable,否则你没有任何使用。 避免假设With负责处理With语句中使用的对象引用。它没有。有意义的是,它会在15年左右的时间里阻止VB.NET团队如此戏剧性地改变它的行为。输入更少的代码绝不仅仅是一个捷径。在“为什么没有C#有关键字”这个问题上有很多特色。 C#早期的热土豆,但现在已经有一段时间了。
答案 1 :(得分:2)
With
与内存或资源使用无关。这只是一个简写符号。
答案 2 :(得分:0)
With
不仅仅是速记符号。如果在对象上设置大量属性可以略微提高每个MSDN的性能,“如果对象的限定路径很长,使用With ... End With可以提高性能。” (请参阅http://msdn.microsoft.com/en-us/library/wc500chb.aspx上的备注)这样做的原因是with块只需要获取对象引用一次,然后它会为每个后续调用重用该对象引用。如果每次运行时必须多次获取对象引用时显式列出对象。这不是一个很大的区别,但在某些情况下它可能很重要。