2010-02-25 2 views
1

Я новичок в программировании SQL CLR. У меня есть хранимая процедура CLR, которая записывается в локальный файл. Но когда у меня есть несколько соединений, вызывающих одну и ту же хранимую процедуру, как мне синхронизировать доступ к локальному файлу? Любые встроенные функции? Или любой другой вход приветствуется.Программирование SQL CLR - Синхронизация

ответ

2

Безопасные сборки CLR внутри SQL не разрешены для совместного использования состояния и, следовательно, не могут синхронизироваться. По уважительной причине, блокируя синхронизацию, вы крадете рабочего из пула потоков SQL Server. Работники пользуются большим спросом, не могут позволить себе потерять их, ожидая синхронизации пользователя. Небезопасные сборки могут делать что угодно, используя обычные объекты синхронизации .NET. (Монитор, операторы блокировки, LockWriter lock и т. Д. И т. Д.), Но поэтому они называются «небезопасными»: вы можете закончить замораживание экземпляра SQL Server.

Сделайте свой доступ к файлам и синхронизацию из внешнего процесса.

+0

Привет У меня есть небезопасная сборка только. Но все же каждое соединение выполняет SP в своем собственном контексте. Так что все еще блокировки операторов не работают. Любая идея о том, как делить состояние. – Prabhu

+0

Предположим, что я блокирую объект словаря. Можно ли переключиться на использование ConcurrentDictionary и удалить блокировки? – Triynko

+0

@Triynko: не задавайте вопросы в комментариях, размещайте новые вопросы. –