我遇到过一些代码,它们有一个单例,可以创建/重用MSDAAB数据库对象的静态实例。创建后数据库对象线程是否安全?我在MSDAAB文档中找不到任何方式。
答案 0 :(得分:1)
尽管this answer,我认为正式答案是否定的。
我之所以这么说,Database
将存储过程参数缓存在名为parameterCache
的实例变量中。
项目已添加到缓存中,并且还可以使用ClearParameterCache()
方法清除缓存,而无需先获得parameterCache
上的锁定。
如果调用ClearParameterCache()
,则可能会遇到一个线程认为缓存中有项目然后另一个线程清除缓存的情况,当第一个线程去检索项目时它已被删除并抛出异常。
好消息是,如果永远不会调用ClearParameterCache()
,那么我期望的最糟糕的是,最初可以多次导出参数并将其多次添加到缓存中(通过不同的线程)。我还没有对它进行过测试,但看起来它仍然可以工作(虽然效率很低)。
所以,实际上,只要你不打电话ClearParameterCache()
,我认为你应该没事。