0

我遇到了一些具有单例的代码,它创建/重用 MSDAAB 数据库对象的静态实例。创建后数据库对象是否线程安全?我在 MSDAAB 文档中找不到任何一种方式。

4

1 回答 1

1

尽管有这个答案,我认为正式的答案是否定的。

我这么说的原因是将Database存储过程参数缓存在一个名为parameterCache.

项目被添加到缓存中,也可以使用该ClearParameterCache()方法清除缓存,而无需先获取parameterCache.

如果ClearParameterCache()被调用,那么可能会遇到这样的情况:一个线程认为缓存中有一个项目,然后另一个线程清除缓存,当第一个线程去检索它已被删除的项目并引发异常时。

好消息是,如果ClearParameterCache()从未调用过,那么我所期望的最糟糕的情况是,最初可以多次派生参数并多次(通过不同的线程)将其添加到缓存中。我还没有测试过它,但它看起来应该仍然可以工作(尽管它效率低下)。

所以,实际上,只要你不打电话ClearParameterCache(),我认为你应该没问题。

于 2010-07-07T21:17:50.357 回答