我使用SqlDependency来监视数据库中的更改。比方说,这些是股票报价,让这个例子更容易理解。应用程序还使用(另一个)SqlDependeny对象来监视静态数据的更改,这些数据被缓存在应用程序中。
我所做的是在启动应用程序时通过SqlDependency.Start()启动依赖项,在关闭应用程序时调用SqlDependeny.Stop。到目前为止,一切都很顺利。
现在,当用户选择股票符号时,将设置另一个SqlDependency并将更改通知我,我可以对其采取行动。当用户更改他想要跟踪的符号时,我必须设置一个新的SqlDependency,必须清除旧的SqlDependency。
我的问题是:这是真的吗?如何清除特定的依赖项呢?SqlDependency.Stop()是一种静态方法,可以停止所有依赖关系--即使在那里,我也很不确定是否真的清除了server上的通知订阅--或者只是等待进入超时状态。
这都引发了一个问题,是使用SqlDependency进行一些缓存是正确的方式,还是有其他好的、容易的实践来实现这一点?
发布于 2011-05-02 18:18:20
不知道为什么要在这里打电话给Stop。只需为新符号创建一个新的SqlDependency实例,并删除对旧符号实例的引用,允许垃圾收集及时清理它。只要您还删除了对旧实例的OnChange事件的订阅,这种方法就应该适用于您。
不过,不确定如果您想要支持许多用户,它将如何扩展。在这种情况下,集中式缓存更改检测和合并方案可能更好。
https://stackoverflow.com/questions/5859021
复制相似问题