我的一个班级中有以下代码段。请注意,这是一种静态方法。我想知道的是,当我创建一个新的StringBuilder对象时,旧的会发生什么?是垃圾收集了吗?
谢谢, Prayag
Public Shared Function CleanUpSql(ByVal s As String) As String
Dim sb As New StringBuilder(s.Trim())
RemoveBrackets(sb)
FixWhiteSpace(sb)
TrimSemicolon(sb)
Return sb.ToString()
End Function
答案 0 :(得分:4)
在执行后的某个时刻离开CleanUpSql
方法,从而离开了sb
定义的范围,StringBuilder
引用的sb
将被垃圾收集。你不确切知道这个集合何时会发生(你可能不在乎)。
当没有范围内变量引用它时,对象会被垃圾收集。
您可以请求立即使用System.GC.Collect()
进行收集(在CLR的当前实现中,立即执行垃圾收集)。我建议您不这样做,但是 - 很少需要手动垃圾收集操作。
如果您对更多细节感兴趣,请start here。
答案 1 :(得分:0)
最后它会在sub存在之后,因为对象的引用存在于调用堆栈中。但是只要CLR感到需要就会收集它,而不一定是你制作一个新的。
答案 2 :(得分:0)
您正在堆栈上创建sb,因此一旦调用CleanUpSql退出sb无法访问并且将被垃圾收集。你甚至不需要再打一次电话。