1

我试图决定这个 StreamWriter 变量是否应该在 if 语句中声明为字段、本地或本地。我担心的是,在我将它传递给 Console.SetOut() 并继续执行 if 语句之后,将不再有对该对象的引用,并且它会被垃圾收集。

我是否过度考虑了这一点,或者假设 Console 类将在我的应用程序的整个执行过程中引用它是否安全?

4

3 回答 3

4

在我将它传递给 Console.SetOut() 并继续执行 if 语句之后,将不再有对该对象的引用

这个假设是不正确的:将有一个对对象的引用,即Console. 所以,不用担心你的流编写器会被 GC 处理。

于 2012-11-28T21:30:20.973 回答
1

GC计数将跟踪引用,即使它们已经在应用程序中传递。如果您无法再访问它们,GC 应该只收集对象。

具体来说,保留对传递给它Console.SetOut的内部引用。TextWriter

于 2012-11-28T21:28:17.530 回答
1

是的,你想多了...... GC 永远不会收集你可能使用的任何东西。算了吧……你(应该)有更重要的事情要担心……

我建议您遵循的有关 GC 的唯一规则是,如果一个类实现 IDisposable,您必须调用 .Dispose() 或将其包装在“使用”中。就这样。

于 2012-11-28T21:29:59.740 回答