我试图决定这个 StreamWriter 变量是否应该在 if 语句中声明为字段、本地或本地。我担心的是,在我将它传递给 Console.SetOut() 并继续执行 if 语句之后,将不再有对该对象的引用,并且它会被垃圾收集。
我是否过度考虑了这一点,或者假设 Console 类将在我的应用程序的整个执行过程中引用它是否安全?
我试图决定这个 StreamWriter 变量是否应该在 if 语句中声明为字段、本地或本地。我担心的是,在我将它传递给 Console.SetOut() 并继续执行 if 语句之后,将不再有对该对象的引用,并且它会被垃圾收集。
我是否过度考虑了这一点,或者假设 Console 类将在我的应用程序的整个执行过程中引用它是否安全?
在我将它传递给 Console.SetOut() 并继续执行 if 语句之后,将不再有对该对象的引用
这个假设是不正确的:将有一个对对象的引用,即Console
. 所以,不用担心你的流编写器会被 GC 处理。
GC计数将跟踪引用,即使它们已经在应用程序中传递。如果您无法再访问它们,GC 应该只收集对象。
具体来说,保留对传递给它Console.SetOut
的内部引用。TextWriter
是的,你想多了...... GC 永远不会收集你可能使用的任何东西。算了吧……你(应该)有更重要的事情要担心……
我建议您遵循的有关 GC 的唯一规则是,如果一个类实现 IDisposable,您必须调用 .Dispose() 或将其包装在“使用”中。就这样。