ファイルにメッセージを出力するために、独自のトレース リスナーを使用しています。パフォーマンスを向上させるために、App.Config で autoflush を false に設定しました。したがって、デバッグ中にプログラムを終了するなど、予期しない/異常なプログラムの終了が発生した場合でも、基礎となるバッファーが常にディスクにフラッシュされるようにする必要があります。これは一般的な問題かもしれないと思ったのですが、エレガントな解決策はありますか?
2 に答える
1
いいえ、これを行う簡単な方法はありません。
バッファを手動でフラッシュするメソッドを公開できます。具体的には、未処理の例外で .NET アプリケーションがクラッシュした場合、AppDomain ハンドラーを登録できます。このハンドラーは、バッファー フラッシュ メソッドを呼び出すことができます。
ただし、一部の例外は、ドメインで未処理の例外ハンドラーを実行する場合としない場合があります。私はそれらがCLR 自体に固有のものStackoverflowException
であるOutOfMemoryException
と信じています。ThreadAbortedException
しかし、一般的には、 AppDomain::UnhandledExceptionでバッファをフラッシュするのがよいでしょう。
アプリケーションを故意に強制終了した場合、これがバッファをフラッシュするとは思いません。
于 2013-08-27T09:28:21.627 に答える
0
デストラクタでオブジェクトを作成します。デストラクタでフラッシュします。MSDN によると、プログラムの終了時にデストラクタが呼び出されます。あなたのプログラムがクラッシュした場合にこれが機能するかどうかは、まだ調査中です。
于 2013-08-27T09:22:06.980 に答える