【发布时间】:2016-01-08 15:11:29
【问题描述】:
我知道这个问题已经被问过很多次了,但是没有一个答案适合我的问题。 我有一个线程计时器每 30 秒触发一次,它查询负载较重的 MSSQL 数据库。如果我需要更新我正在使用的控制台应用程序中的数据,我会使用 Linq To Sql 来更新存储在内存中的数据。
我的问题是有时我会收到错误 ExecuteReader requires an open and available Connection。
线程计时器的代码触发Thread.Run(reload());
连接字符串是
//example code
void reload(...
string connstring = string.Format("Data Source={0},{1};Initial Catalog={2};User ID={3};Password={4};Application Name={5};Connect Timeout=120;MultipleActiveResultSets=True;Max Pool Size=1524;Pooling=true;"
settings = new ConnectionStringSettings("sqlServer", connstring, "System.Data.SqlClient");
using (var tx = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
using (SwitchDataDataContext data = new SwitchDataDataContext(settings.ConnectionString))
{
data.CommandTimeout = 560;
然后我做了很多 linqtosql 搜索。异常会不时发生,但并不总是发生在同一个查询上。就像连接被打开并被强制关闭。
有时例外情况表明当前状态是打开、关闭、连接中。我向 SQL 数据库添加了一个更大的线程池,但似乎没有任何帮助。
我在程序的其他部分也有 ADO,没有任何问题。
【问题讨论】:
-
1. 重负载下的 MSSQL db 2. 每 30 秒 3. data.CommandTimeout = 560 4. 然后我做了很多 linqtosql 搜索。那不计算。我认为你至少应该看看一些缓存模式。
标签: c# sql-server linq-to-sql