Кэширование с помощью SqlDependency

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

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

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

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

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

1 ответ

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

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

Другие вопросы по тегам