当前位置:  开发笔记 > 编程语言 > 正文

最佳做法是跨多个线程使用静态数据库连接吗?

如何解决《最佳做法是跨多个线程使用静态数据库连接吗?》经验,为你挑选了2个好方法。

是否有任何共识是关于多线程应用程序的最佳实践:(1)使用单个,共享,静态连接到SQL数据库,或(2)每个BackgroundWorker打开它自己的唯一连接到数据库?

我显然假设每个线程都需要连接到同一个数据库.

使用类型是否会影响答案?例如,如果每个线程只运行SELECT语句怎么办?或者,如果某些线程也可以执行UPDATE语句?或者用法并没有真正有所作为,你应该总是/永远不分享静态连接?



1> dmportella..:

正如您对问题的评论所讨论的那样.最好的做法是将连接处理留给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



2> nos..:

从DbConnection(或SqlConnection)文档:

线程安全

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.

因此,连接对象不是线程安全的,这意味着您不应跨多个线程共享连接实例.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有