Subsonic ActiveRecordとSql Serverを使用して新しいレコードをすばやく追加すると、タイムアウトSqlExceptionが発生します。Subsonic ActiveRecord - たくさんのレコードを追加するときにハングする接続
タイムアウトが切れています。プールから 接続を取得する前に、タイムアウト期間 が経過しました。プールされたすべての 接続が使用され、最大プール サイズに達したため、 が発生している可能性があります。
for (int i = 0; i < 1000; i++) { var address = new Address(); address.City = "TEST"; address.Save(); }
それが100に達するまでのコードは、その時点で(最大プールサイズを、おそらく偶然ではなく、)レコードを追加します:私は、コードの次のような単純なブロックで、この問題を再現するために管理している
上記の例外を除いて失敗します。その後、接続は5〜10分間保持され、その間にデータベースを使用しようとするすべての試みは上記の例外を与えます。
興味深いことに、これをローカルマシン上でVS(同じデータベースインスタンスと同じコードベース)で実行すると、1000個のレコードすべてを追加することができます。おそらくここと私のホストとの間の待ち時間は、データベースの呼び出しを十分に遅くするでしょうか?
これはローカルで動作すると考えられますが、これはサブソニックの問題ではないと思いますが、間違いがあります。また、コードや設定を変更して、多くのレコードを連続して追加しますか?
おかげで、私は本当にそれがあなたのARの問題だった夢を見ませんでした。私は3.0.0.3を使用しています。 ホスティングプロバイダまたはASP.NETの設定が必要です。より奇妙なこと:100を追加すると、2つのブラウザウィンドウで同時にアドインを実行するページを読み込んでも、正常に繰り返し実行されます。 101を追加すると毎回失敗し、すべての接続が無期限にロックされます。 遅延をシミュレートして接続/切断の速度を低下させるたびに遅延が発生しても、それは役に立ちません。 .Add()コマンドの代わりに.Find()コマンドを実行するのと同じ効果があります。 –
もう1つのデータポイントは、ARの外側でこれを行うことは、ホスト上で失敗しません:新しいsqlconnection、新しいsqlcommand、connを開く、テキストコマンドとして挿入cmdを実行する、cmdを終了する、connを閉じる)無限の数までおそらく、ARがホストの設定と競合する接続/コマンドをリリース/ディスポジションする方法に関するものでしょうか? –