小编And*_*son的帖子

使用多线程服务的数据库连接池

我有一个.NET 4 C#服务,它使用TPL库进行线程化.我们最近将它切换为也使用连接池,因为一个连接正在成为处理的瓶颈.

以前,我们使用lock子句来控制连接对象的线程安全性.当工作备份时,队列将作为任务存在,并且许多线程(任务)将等待lock子句.现在,在大多数情况下,线程会更快地等待数据库IO和工作进程.

但是,现在我正在使用连接池,我们遇到了一个新问题.达到最大连接数(默认为100)后,如果请求进一步连接,则会超时(请参阅池信息).发生这种情况时,会抛出一个异常,说"连接请求超时".

我的所有IDisposable都在using语句中,我正在管理我的连接.这种情况的发生是由于请求的工作量超过了池可以处理的工作量(这是预期的).我理解为什么抛出这个异常,并且知道处理它的方法.一个简单的重试感觉就像一个黑客.我也意识到我可以通过连接字符串增加超时时间,但这不是一个可靠的解决方案.在以前的设计中(没有池),工作项将因应用程序内的锁定而处理.

处理此方案以确保处理所有工作的好方法是什么?

c# service multithreading connection-pooling

9
推荐指数
1
解决办法
8647
查看次数

标签 统计

c# ×1

connection-pooling ×1

multithreading ×1

service ×1