【问题标题】:Caching with SqlDependency使用 SqlDependency 进行缓存
【发布时间】:2011-05-02 15:26:34
【问题描述】:

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

我所做的是在启动应用程序时通过SqlDependency.Start() 启动依赖关系,并在关闭应用程序时调用SqlDependeny.Stop。到目前为止一切正常。

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

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

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

【问题讨论】:

    标签: c# .net caching sqldependency notificationservices


    【解决方案1】:

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

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

    【讨论】:

    • 您好史蒂夫,谢谢您的回答!通常如何开始构建集中式缓存更改检测引擎?可能是通过在 sql server 上使用代理,一旦观察到的数据发生变化(通知订阅),它就会向应用程序发送消息?如果您能指出我的示例或网址,那就太好了,我可以在其中找到更多关于这种做法的信息。非常感谢!
    • 我一直在做一些内存测试,并没有找到任何理由删除旧的 OnChange 事件处理程序。
    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 2017-02-25
    • 2015-04-04
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2021-11-27
    相关资源
    最近更新 更多