この StreamWriter 変数をフィールド、ローカル、または if ステートメント内のローカルとして宣言する必要があるかどうかを判断しようとしています。私の心配は、それを Console.SetOut() に渡して if ステートメントを超えて実行を続けた後、このオブジェクトへの参照が残っていないことであり、Garbage Collected が取得されます。
これは考えすぎですか?それとも、アプリケーションの実行中に Console クラスがそれを参照すると想定しても安全でしょうか?
この StreamWriter 変数をフィールド、ローカル、または if ステートメント内のローカルとして宣言する必要があるかどうかを判断しようとしています。私の心配は、それを Console.SetOut() に渡して if ステートメントを超えて実行を続けた後、このオブジェクトへの参照が残っていないことであり、Garbage Collected が取得されます。
これは考えすぎですか?それとも、アプリケーションの実行中に Console クラスがそれを参照すると想定しても安全でしょうか?
それを Console.SetOut() に渡し、実行が if ステートメントを超えて続行された後、このオブジェクトへの参照はもう残っていません
その仮定は正しくありません。オブジェクトへの参照が残されます。つまり、 内のプライベート フィールドですConsole
。したがって、ストリーム ライターが GC される心配はありません。
GCカウントは、参照がアプリケーションに渡された場合でも、参照を追跡します。GCは、オブジェクトにアクセスする方法がなくなった場合にのみオブジェクトを収集する必要があります。
具体的には、渡されたものConsole.SetOut
への内部参照を保持します。TextWriter
はい、考えすぎです... GC は、使用する可能性のあるものを収集することはありません。忘れてください...もっと重要なことを心配する必要があります...
私がお勧めする GC に関する唯一のルールは、クラスが IDisposable を実装する場合、.Dispose() を呼び出すか、「using」でラップする必要があるということです。タントです。