5

我正在使用 SqlDependency 来监视数据库中的更改。假设这些是股票报价,以使示例易于理解。该应用程序还使用(另一个)SqlDependeny-Object 来监视对静态数据的更改,这些数据缓存在应用程序中。

我所做的是在启动应用程序时启动依赖项,并在关闭应用程序时SqlDependency.Start()调用。SqlDependeny.Stop到目前为止,一切都运行良好。

现在,当用户选择股票代码时,会设置另一个 SqlDependency 并通知我更改,我可以对其采取行动。当用户更改他想要跟踪的符号时,我必须设置一个新的 SqlDependency 并且必须清除旧的 SqlDependency

我的问题是:这是真的吗?我怎样才能清除特定的依赖关系?SqlDependency.Stop()是一种静态方法并停止所有依赖项 - 即使在那里我也很不确定 SQL 服务器上的通知订阅是否真的被清除了 - 或者只是等待超时。

这一切都提出了一个问题,如果使用 SqlDependency 进行一些缓存是正确的方法,或者是否有其他好的和简单的做法来实现这一点?

4

1 回答 1

2

不知道你为什么需要在Stop这里打电话。只需为新符号创建一个新SqlDependency实例,并删除对旧符号实例的引用,让垃圾收集及时清理它。只要您还删除了对旧实例OnChange事件的订阅,这种方法就应该适用于您。

但是,如果您想支持许多用户,不确定它将如何扩展。在这种情况下,集中式缓存更改检测和合并方案可能会更好。

于 2011-05-02T18:18:20.503 回答