OleDbConnection实例被缓存和每次使用都new OleDbConnection的区别

erictang2003 2011-10-08 06:40:33
谁能讲讲?已知ADO.NET内建有OleDbConnection Pool, 那么以下两种方式有什么区别呢?
方式一(示例):
var hashtable = Hashtable.Synchronized(new Hashtable());
if( hashtable[key] = null )
hashtable[key] = new OleDbConnection();

return (OleDbConnection)hashtable[key];


方式二:
每次都 var conn = new OleDbConnection();

在多用户同时访问读取ACCESS数据库时有什么区别?
...全文
185 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
皇城龙三 2011-10-09
  • 打赏
  • 举报
回复
对于第一种方式

当Hashtable没有任何线程在读取时,Synchronized就可以支持使用多个线程写入。

但是多个读取,会导致线程访问的安全性

当出现并发访问的时候可以用这种方式。


myhope88 2011-10-09
  • 打赏
  • 举报
回复
应该都一样的吧
jshi123 2011-10-08
  • 打赏
  • 举报
回复
如果Open一个已经打开的connection, 会报InvalidOperationException,这时候要处理错误,或open之前要判断并发和等待,比较麻烦
机器人 2011-10-08
  • 打赏
  • 举报
回复
不建议自己做缓存,因为你要考虑的事情太多了。
比如上一次Connection是否在使用中?是否有未完成的事务等。底层控制的已经考虑了。
threenewbee 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jshi123 的回复:]
在多线程情况下,采用第一种方式,有可能两个线程拿到同一个connection, 这时候如果第一个线程正在进行数据库操作尚未关闭,第二个线程尝试同时访问数据库就可能会出错了
[/Quote]
Connection的实例应该是线程安全的。
jshi123 2011-10-08
  • 打赏
  • 举报
回复
不容易测到,要很大压力情况下,多线程并发,且访问数据库时间要长
erictang2003 2011-10-08
  • 打赏
  • 举报
回复
jshi123我也这么想的,准备测试一下
jshi123 2011-10-08
  • 打赏
  • 举报
回复
在多线程情况下,采用第一种方式,有可能两个线程拿到同一个connection, 这时候如果第一个线程正在进行数据库操作尚未关闭,第二个线程尝试同时访问数据库就可能会出错了
LMAOhuaNL 2011-10-08
  • 打赏
  • 举报
回复
真的是没多大区别的了,就那个样子差不多,第一种专业一点罢了
threenewbee 2011-10-08
  • 打赏
  • 举报
回复
Access本来就不能适应多用户访问。无论什么办法,10个用户以上基本就瘫痪了。所以2种方法没有本质的区别。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧