0

1時間ごとに実行されるWindowsサービスにログインします。 Windowsサービスの中でParallel.ForEachを使用しています。 AdoNetAppenderを使用してSQL Serverデータベースにログインしています。WindowsサービスのLog4netとタスク並列ライブラリ

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

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

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

+0

ここに投稿すると、あなたのために緊急の可能性がありますが、それは他の誰にとっても緊急ではありません。 [このコミュニティの議論](http://meta.stackoverflow.com/q/326569/472495)をお読みください。 – halfer

答えて

1

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

関連する問題