また、既存のロギング パッケージを使用することをお勧めします。あなたがこれを自分でやろうと決心した場合、そして将来のために心に留めておくだけです:
a) いいえ、それは良い考えではありません。ファイナライザ (デストラクタ) でマネージド リソースにアクセスするべきではありません。たとえば、メモリにログ文字列がある場合、それら (またはそれらが含まれているリスト) にアクセスすることはお勧めできません。この点。
推奨されるパターンを繰り返したくないので、https://stackoverflow.com/a/1943856/2586804を参照してください
管理中にアクセスする必要がある場所は 1 つだけであることがわかります。Dispose
これは、ユーザー コードによって呼び出され、GC ではない場合です。したがって、これを達成するには、.Dispose()
自分自身を呼び出す (または a を使用してusing
) 必要があるという結論に達するのに役立ちます。GC がそれを行う場合 (およびその場合) は、ログ行を含む管理対象メンバーにアクセスできません。
b)わかりませんが、とにかくこの目的でファイナライザーを使用できないため、問題ではありません。
肝心なのは、GC に頼ってコードを実行することはできないということです。いつ発生するかわからないため、悪い習慣です。さらに、現在または将来のどこかでオブジェクトへの参照があると、オブジェクトの収集が妨げられ、バグが発生します。
また、c# ファイナライザー/デストラクタにコードを実行させるべきではありません。これは、それが目的ではなく、マシンが使い果たされないようにアンマネージ リソースを解放するためのものだからです。また、C# でそれらを使用することはめったにないことに注意してください。これは、ほとんどの人が日常業務ですべてマネージド オブジェクトを使用しているためです。
オブジェクトにログを書き込むように明示的に指示する代わりに、呼び出されるメソッドFlush
が適切な名前になります。または、一度に 1 行ずつ書き込みます。これは通常の動作になります。