我有一段代码,每〜0.25秒执行一次。尽管我每次都关闭正在使用的数据读取器,但它在前十次迭代中仍然可以正常工作,直到因“与该连接相关联的Datareader”错误而崩溃为止。请求的速度可能会导致这种情况吗?我将其放慢到每1.5秒执行一次,但它仍然发生。此连接无处可用于此块,因此我不确定为什么会发生此连接。
MySqlCommand cmd = new MySqlCommand(QueryString, connection);
var dataReader = cmd.ExecuteReader();
var dt = new DataTable();
dt.Load(dataReader);
dataReader.Close();
dataReader.Dispose();
cmd.Dispose();
最佳答案
最有可能在某个时刻同时执行两个操作。由于每个连接都使用相同的连接,因此会遇到并发问题-默认情况下,一个连接仅支持一个打开的游标。所有需要发生的是DB查询花费的时间超过了计时器间隔。
添加同步以确保两个请求不会同时运行-如果已经有一个请求待处理,则立即返回。
另外,请确保正确使用using
和try
... finally
-可能会阻止dataReader.Dispose()
的运行,这将导致连接无法打开任何新的游标,直到处置完读取器后,该异常才可能运行。由GC和终结器处理。
关于c# - SQL DataReader已关联高频轮询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36335302/