C# 如果StreamWriter变量在if语句中初始化并作为参数传递给Console.SetOut(),它是否可以得到GC';你是不是太快就放弃了?
我试图确定这个StreamWriter变量是应该在if语句中声明为字段、局部还是局部。我担心的是,在我将其传递到Console.SetOut()并继续执行if语句之后,将不再剩下对该对象的引用,它将被垃圾收集 我是否想得太多了,还是可以安全地假设Console类将在整个应用程序执行过程中引用它?GC计数将跟踪引用,即使它们已在应用程序中传递。只有当您无法再访问对象时,GC才应该收集对象 具体来说,C# 如果StreamWriter变量在if语句中初始化并作为参数传递给Console.SetOut(),它是否可以得到GC';你是不是太快就放弃了?,c#,.net,console,streamwriter,C#,.net,Console,Streamwriter,我试图确定这个StreamWriter变量是应该在if语句中声明为字段、局部还是局部。我担心的是,在我将其传递到Console.SetOut()并继续执行if语句之后,将不再剩下对该对象的引用,它将被垃圾收集 我是否想得太多了,还是可以安全地假设Console类将在整个应用程序执行过程中引用它?GC计数将跟踪引用,即使它们已在应用程序中传递。只有当您无法再访问对象时,GC才应该收集对象 具体来说,Console.SetOut保留传递给它的TextWriter的内部引用。GC计数将跟踪引用,即使它
Console.SetOut
保留传递给它的TextWriter
的内部引用。GC计数将跟踪引用,即使它们已在应用程序中传递。只有当您无法再访问对象时,GC才应该收集对象
具体来说,
Console.SetOut
保留了传递给它的TextWriter
的内部引用。是的,你想得太多了。。。GC永远不会收集您可能使用的任何东西。忘了它吧。。。你应该有更重要的事情要担心
关于GC,我建议您遵循的唯一规则是,如果类实现IDisposable,则必须调用.Dispose()或将其包装为“using”。是的,你想得太多了。。。GC永远不会收集您可能使用的任何东西。忘了它吧。。。你应该有更重要的事情要担心 关于GC,我建议您遵循的唯一规则是,如果类实现IDisposable,则必须调用.Dispose()或将其包装为“using”。就这样 在我将其传递到Console.SetOut()并继续执行if语句之后,将不再剩下对该对象的引用 这种假设是不正确的:将有一个对对象的引用,即
控制台中的一个私有字段。所以,不用担心你的流作者会被GC'ed
在我将其传递到Console.SetOut()并继续执行if语句之后,将不再剩下对该对象的引用
这种假设是不正确的:将有一个对对象的引用,即控制台中的一个私有字段。因此,不必担心流作者会被GC’ed。如果问题是“我是不是想得太多了?”,答案几乎总是“是”。如果问题是“我是不是想得太多了?”,答案几乎总是“是”。当你说“GC统计引用”时要小心。不是那样的。对不起,措辞很糟糕。我的意思是在物质中计数,而不是在数字上计数。当你说“GC计数引用”时要小心。不是那样的。对不起,措辞很糟糕。我的意思是按物质计算,而不是按数字计算。