连接池错误

时间:2016-06-06 14:27:43

标签: c# sql-server dll service database-connection

我有一个Windows服务引用的DLL,它有一天中的计时器触发了多个作业(每个作业的间隔时间间隔从20秒到15分钟)但是最近在我的日志文件中我注意到很多此消息出错:

  

SQL错误:超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。

我不知道SQL(2015)中是否有一些我可以更改或查看的设置或者是否是代码问题。

调用DLL中的不同作业(具有SQLDatabase类)的服务中的代码总是在完成后调用Control.Dispose(),它会破坏所有对象,包括破坏连接的SQLDatabase类,它自己的dispose方法

例如,在定时作业运行后我将其处理掉,例如

Control control = new Control();
control.RunJobs("SOME_JOB_TO_RUN");
control.Dispose();

然后在我自己的主类Kill()上调用一个方法来调用

this.DataAccess.Dispose();

这应该会杀死对象并关闭连接,例如我的DataAccess对象......

public class SqlDataAccess : System.IDisposable


public void Dispose()
{       
    if (_connection != null)
    {
        _connection.Close();
       _connection.Dispose();
    }   
}

所以a)我不确定为什么这些错误突然突然冒出来,我增加了计时器间隙以减少运行的进程数,看看是否有帮助(它没有)。 / p>

同样由于多个进程可能同时运行(由于计时器重叠),每次从每个方法调用DLL(由相关计时器调用)都不应该(据我所知 - 我可能是错误的)能够共享连接或了解同时进行的其他进程。

所以我不确定我是否应该杀死DataAccess类并破坏连接以允许池化,或者我是否应该做其他事情。

据我所知(如ASP经典),重复使用连接是首选方法,我们总是习惯在最早点(如果需要)打开与DB的连接,在整个过程中重用连接页面,然后在不再需要时将其销毁。

然而,这是一个Windows服务,其中多个进程都在重叠时调用,定时器使用执行工作的DLL。我在每个定时进程调用期间重新使用连接,并在结束时销毁它们,但是我可能会做其他事情。

非常感谢任何帮助或想法。

0 个答案:

没有答案