垃圾收集器 .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 有一个垃圾收集器,为啥我们需要终结器/析构器/处置模式?