垃圾收集器 .Net 将收集 Stack() [关闭]

Posted

技术标签:

【中文标题】垃圾收集器 .Net 将收集 Stack() [关闭]【英文标题】:Do Stack() will be collect by garbage collector .Net [closed] 【发布时间】:2016-11-18 22:43:13 【问题描述】:

myFunction() 中,我定义了一个堆栈,如:Stack myStack = new Stack()。如果myFunction() 在服务器上运行多次,myStack 是否会被 GC 收集?如果不是,请建议我一种在 asp.Net 中使用堆栈之类的方法或更好地提高性能的方法。我还在学习asp.Net

【问题讨论】:

【参考方案1】:

如果在方法中本地声明了一个变量,并且在方法范围之外不存在对其的引用,那么在方法结束时,本地变量所持有的引用将不再存在。 (以前)引用的对象不再有任何引用,因此可以进行垃圾回收。

【讨论】:

myStack 位于我在模型中用作自定义验证器的类中。所以当模型已经检查有效时,它完全由 GC 收集,对吗? @Nampd 是方法中的局部变量,还是类的字段或属性? 这是一个局部变量@spender 所以你会没事的。【参考方案2】:

如果您在myFunction() 调用范围内使用myStack 变量,则在myFunction() 调用结束之前不会对它进行垃圾收集。例如:

public void myFunction()

    Stack myStack = new Stack();
    //do stuff with myStack

在这种情况下,如果您调用 myFunction(),您的 myStack 变量将在您的 myFunction() 调用结束后被垃圾回收。但是,如果您正在访问 myStack 方法内的 myStack 变量(从其他范围),则不会在 myFunction() 调用结束时对它进行垃圾收集,因为(可能)有另一个引用它。

【讨论】:

以上是关于垃圾收集器 .Net 将收集 Stack() [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

既然 .NET 有一个垃圾收集器,为啥我们需要终结器/析构器/处置模式?

.net 垃圾收集和高 CPU

.Net Discovery系列之三 深入理解.Net垃圾收集机制(上)

对 .NET 垃圾收集器的质疑

垃圾收集器Serial ParallelCMSG1

垃圾收集时的本机线程行为