2016-03-31 4 views
0

私は0.25秒ごとに実行されるコードブロックを持っています。私は毎回使用されているデータ・リーダーを閉じているにもかかわらず、「この接続にすでに関連付けられているデータウェアハウス」エラーでクラッシュするまで、最初の10回の反復の周りで正常に動作します。リクエストの速度が原因になっていますか?私はそれを1.5秒ごとに実行するのを遅らせ、まだ起こった。この接続は他の場所では使用されないので、なぜこのブロックが行われているのか分かりません。SQLデータレアはすでに高頻度ポーリングに関連付けられています

  MySqlCommand cmd = new MySqlCommand(QueryString, connection); 
      var dataReader = cmd.ExecuteReader(); 
      var dt = new DataTable(); 
      dt.Load(dataReader); 
      dataReader.Close(); 
      dataReader.Dispose(); 
      cmd.Dispose(); 
+0

タイマーはどのようなトリガーですか?例えば。それは別のスレッドを含むのですか?また、使い捨てパターンを使用してみてください。 – Caramiriel

+0

まず、Disposingを実行するために 'using(...){...}'ステートメントを使います。接続用にも追加します。 –

答えて

0

ほとんどの場合、ある時点で2つの操作が並行して実行されます。それぞれに同じ接続を使用しているため、同時実行性の問題が発生します。デフォルトでは、1つの接続では1つのオープンカーソルのみがサポートされています。発生する必要があるのは、DBクエリーがタイマー間隔より長くかかることだけです。

2つの要求が同時に実行されないように同期を追加します。すでに要求が保留中の場合は、すぐに戻ります。また

usingtryを使用してください... finally適切に - それは読者がGCにより処分されるまで、新しいカーソルを開くことができない、接続を維持しますこれは、例外が実行してからdataReader.Dispose()を防止している可能性がありますファイナライザ。

0

datareaderとExecuteNonQueryに別の接続を使用

関連する問題