Является ли объект базы данных MS DAAB 4.1 потокобезопасным? - PullRequest
0 голосов
/ 06 июля 2010

Я сталкивался с кодом, в котором есть одиночный код, который создает / повторно использует статический экземпляр объекта базы данных MSDAAB. Является ли объект базы данных потокобезопасным после создания? Я не мог найти ничего, так или иначе в документах MSDAAB.

1 Ответ

1 голос
/ 08 июля 2010

Несмотря на этот ответ , я думаю, что формальный ответ - нет.

Причина, по которой я говорю это, заключается в том, что Database кэширует параметры хранимой процедуры в переменной экземпляра с именем parameterCache.

Элементы добавляются в кеш, и кеш также может быть очищен с использованием метода ClearParameterCache() без предварительного получения блокировки на parameterCache.

Если вызывается ClearParameterCache(), то возможны ситуации, когда один поток думает, что в кеше есть элемент, тогда другой поток очищает кеш, а когда первый поток возвращается, чтобы извлечь удаленный элемент, и исключение.

Хорошая новость заключается в том, что если ClearParameterCache() никогда не вызывается, то худшее, что я могу ожидать, - это то, что первоначально параметры могли бы быть получены несколько раз и добавлены в кэш несколько раз (разными потоками). Я не проверял его, но похоже, что он все еще должен работать (хотя он неэффективен).

Итак, практически, если вы не звоните ClearParameterCache() Я думаю, что вы должны быть в порядке.

...