CLR垃圾收集用于.Net中的局部变量

时间:2011-08-09 16:05:29

标签: .net garbage-collection clr static-methods shared

我的一个班级中有以下代码段。请注意,这是一种静态方法。我想知道的是,当我创建一个新的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

3 个答案:

答案 0 :(得分:4)

在执行后的某个时刻离开CleanUpSql方法,从而离开了sb定义的范围,StringBuilder引用的sb将被垃圾收集。你不确切知道这个集合何时会发生(你可能不在乎)。

当没有范围内变量引用它时,对象会被垃圾收集。

您可以请求立即使用System.GC.Collect()进行收集(在CLR的当前实现中,立即执行垃圾收集)。我建议您这样做,但是 - 很少需要手动垃圾收集操作。

如果您对更多细节感兴趣,请start here

答案 1 :(得分:0)

最后它会在sub存在之后,因为对象的引用存在于调用堆栈中。但是只要CLR感到需要就会收集它,而不一定是你制作一个新的。

答案 2 :(得分:0)

您正在堆栈上创建sb,因此一旦调用CleanUpSql退出sb无法访问并且将被垃圾收集。你甚至不需要再打一次电话。