Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果StreamWriter变量在if语句中初始化并作为参数传递给Console.SetOut(),它是否可以得到GC';你是不是太快就放弃了?_C#_.net_Console_Streamwriter - Fatal编程技术网

C# 如果StreamWriter变量在if语句中初始化并作为参数传递给Console.SetOut(),它是否可以得到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计数将跟踪引用,即使它

我试图确定这个StreamWriter变量是应该在if语句中声明为字段、局部还是局部。我担心的是,在我将其传递到Console.SetOut()并继续执行if语句之后,将不再剩下对该对象的引用,它将被垃圾收集

我是否想得太多了,还是可以安全地假设Console类将在整个应用程序执行过程中引用它?

GC计数将跟踪引用,即使它们已在应用程序中传递。只有当您无法再访问对象时,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计数引用”时要小心。不是那样的。对不起,措辞很糟糕。我的意思是按物质计算,而不是按数字计算。