0

1 時間ごとに実行される Windows サービスにログインしたいと考えています。Parallel.ForEachWindows サービス内で使用しています。AdoNetAppender を使用して sqlserver データベースにログインしています。

ILog _log = LogManager.GetLogger(typeof(EmailJob));

上記の行は、静的インスタンスを使用してデータベースにログインしていることを意味しますよね? AdoNetAppender で接続を維持するにはどうすればよいですか? 私の Windows サービスが最初の反復を完了すると、AdoNetAppender の接続の状態はどうなりますか。すぐに閉じますか、それともガベージ コレクターが処分するのを待っていますか? 次の反復が開始されると、新しい接続が開かれますか?

私の Windows サービスは常に実行されているため、ガベージ コレクターがオブジェクトを破棄するのに時間がかかると、開いている接続の数が SQL Server の最大開いている接続の制限を超えます。反復が終了したら接続を閉じ、反復が開始したら接続を開く必要があります。何をすべきか?

4

1 に答える 1

1

サンプルのコード行は静的ログ変数ではありません。GC が変数をどのように収集するのか疑問に思っています。オブジェクトへの参照がなくなった場合にのみ実行されます。それに加えて、AdoNetAppender の内部動作について多くの仮定を行います。接続は AdoNetAppender で維持されますが、バッファを使用し、バッファがいっぱいの場合にのみ書き込みます。接続管理は、接続文字列で参照しているドライバーによって行われます。ドライバーが開いているか閉じているかを気にする必要はありません。通常、ロガーによって引き起こされた具体的な問題がある場合にのみ、これについて心配する必要があります。では、ロガーが問題を引き起こしていることを示す、どのような症状が見られますか?

于 2016-08-30T14:46:39.490 に答える