2009-07-21 8 views
0

私はMSSQLサーバーに接続されたサービス/アプリケーションを持っている、そしてそれは時々、次のスタックトレースでひどくクラッシュ(?):C#DBアプリケーションは、テーブルを掃除しながら、クラッシュし

Uncaught exception: ArgumentOutOfRangeException - Specified argument was out of the range of valid values. 
Parameter name: capacity, thrown at: mscorlib 
Stack Trace: 
    at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument) 
    at System.Collections.Generic.Dictionary`2..ctor(Int32 capacity, IEqualityComparer`1 comparer) 
    at System.Data.ProviderBase.DbConnectionFactory.PruneConnectionPoolGroups(Object state) 
    at System.Threading._TimerCallback.TimerCallback_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading._TimerCallback.PerformTimerCallback(Object state) 

まあ、実際には、私は「ドン(と私は正確にタイマーが開始されているかわからない)、私はこのクラッシュの理由を見つけることができません。 あなたは何か経験がありますか?これがどうして起こるのか、それを避ける(または無視する)のはなぜか分かりましたか?サービスの稼働時間は私にとって非常に重要です。

+0

接続文字列(間違いなく、間違いなく)を投稿できますか? –

答えて

2

usingまたはtry..finallyを使用してデータベース接続を正しくクリーンアップしていますか?

アプリケーションが実行されているときにperfmon.exeを使用してパフォーマンスカウンタカテゴリ '.Net Data Provider for Sql Server'のカウンタを確認し、使用している接続とプールの数を確認してください。これが成長し続けるなら、あなたはこのエラーにつながる可能性のある接続を漏らしている良い兆候です。

+0

いいえ、私はそうではありません、私は時間の間にサービス全体のために接続されています。 – nothrow

+2

接続プールを使用している可能性があります。その場合は、接続を開いて作業を行い、完了したら閉じます。 –

0

このタイマーはおそらく接続管理の内部的な部分です。

実際にspのいずれかの容量というパラメータを実際に使用しないでください。

もしオーバーフローしないと確信していますか?

関連する問題