Кэширование с помощью SqlDependency - PullRequest
5 голосов
/ 02 мая 2011

Я использую SqlDependency для отслеживания изменений в базе данных. Допустим, это котировки акций, чтобы сделать пример простым для понимания. Приложение также использует (другой) SqlDependeny-Object для мониторинга изменений статических данных, которые кэшируются в приложении.

Что я делаю, так это запускаю Зависимость SqlDependency.Start() при запуске приложения и вызываю SqlDependeny.Stop при закрытии приложения. Пока все работает хорошо.

Теперь, когда пользователь выбирает биржевой символ, устанавливается другая SqlDependency и уведомляет меня об изменениях, над которыми я могу предпринять действия. Когда пользователь изменяет символ, который он хочет отслеживать, я должен установить новую SqlDependency и должен очистить старую SqlDependency .

Мой вопрос: это правда? И как я могу очистить конкретные зависимости? SqlDependency.Stop() - это статический метод, который останавливает все зависимости - и даже там я совершенно не уверен, действительно ли подписки на уведомления на SQL-сервере действительно удалены - или просто ожидают истечения времени ожидания.

Все это поднимает вопрос: правильно ли использовать SqlDependency для некоторого кеширования, или есть другие хорошие и простые методы для достижения этой цели?

1 Ответ

2 голосов
/ 02 мая 2011

Не знаю, зачем вам звонить Stop здесь.Просто создайте новый экземпляр SqlDependency для нового символа и удалите ссылку на экземпляр для старого, что позволит сборщику мусора вовремя очистить его.Пока вы также удаляете свою подписку на событие OnChange старого экземпляра, этот подход должен работать для вас.

Не уверен, как он будет масштабироваться, если вы хотите поддержать многих пользователей.В этом случае централизованное обнаружение изменений в кэше и схема слияния могут быть лучше.

...