是否有任何共识是关于多线程应用程序的最佳实践:(1)使用单个,共享,静态连接到SQL数据库,或(2)每个BackgroundWorker打开它自己的唯一连接到数据库?
我显然假设每个线程都需要连接到同一个数据库.
使用类型是否会影响答案?例如,如果每个线程只运行SELECT语句怎么办?或者,如果某些线程也可以执行UPDATE语句?或者用法并没有真正有所作为,你应该总是/永远不分享静态连接?
正如您对问题的评论所讨论的那样.最好的做法是将连接处理留给ADO.Net,因为它包含连接池控制,所以你应该做的就是每次需要执行一些SQL然后关闭它时打开一个连接.连接池不会立即关闭连接,因为它会使其保持打开状态以便配置时间能够将其传递给其他请求打开新连接的线程.此外,连接不是线程安全的,因此每个线程都应该连接,但ADO.Net将再次处理它.
如果您想了解有关连接池的更多信息,请参阅以下MSDN文章:http://msdn.microsoft.com/en-us/library/8xx3tyca( v = vs.110).aspx
我还强烈建议你在这里阅读微软的ado .net最佳实践:http://msdn.microsoft.com/en-us/library/ms971481.aspx
其他一些文章:
ADO.Net最佳实践http://www.codemag.com/Article/0311051
GOOD READ是改进的企业模式和实践.Net应用程序在ADO.net上有很大的作用:http://msdn.microsoft.com/en-us/library/ff649152.aspx
从DbConnection(或SqlConnection)文档:
线程安全
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.
因此,连接对象不是线程安全的,这意味着您不应跨多个线程共享连接实例.