使用SqlDependency进行缓存

5
我正在使用SqlDependency来监控数据库中的更改。为了便于理解,假设这些是股票报价。该应用程序还使用(另一个)SqlDependency对象来监视静态数据的更改,该数据被缓存在应用程序中。
当启动应用程序时,我会通过SqlDependency.Start()启动依赖项,并在关闭应用程序时调用SqlDependeny.Stop。到目前为止一切正常。
现在,当用户选择一个股票符号时,将设置另一个SqlDependency并通知我进行更改,我可以根据此采取行动。当用户更改要跟踪的符号时,我必须设置新的SqlDependency并且必须清除旧的SqlDependency
我的问题是:这是真的吗?我如何能够清除特定的依赖项?SqlDependency.Stop()是一个静态方法,可以停止所有依赖项 - 即使在那里,我也不确定SQL服务器上的通知订阅是否真正清除 - 还是等待超时。
所有这些都引出了一个问题,即是否使用SqlDependency来进行缓存是正确的方式,或者是否有其他好的简单实践方法可以实现这一点?
1个回答

2
不确定为什么您需要在此处调用 Stop 。只需为新符号创建一个新的 SqlDependency 实例,并删除对旧实例的引用,以允许垃圾回收及时清理它。只要您还取消订阅旧实例的 OnChange 事件,这种方法就应该适合您。但是,如果您想支持多个用户,不确定它将如何扩展。在这种情况下,集中式缓存更改检测和合并方案可能更好。

嗨Steve,谢谢你的回答!通常如何开始构建集中式缓存更改检测引擎?可能是通过在SQL服务器上使用代理,一旦观察到的数据发生更改(通知订阅),就向应用程序发送消息?如果您可以指向一个示例或URL,让我了解更多相关实践,那将非常棒。非常感谢! - Gregor Favre
我一直在进行一些内存测试,没有发现任何理由删除旧的OnChange事件处理程序。 - Jonathan Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接