C# 具有多个通知的.NET SqlDependency与高速轮询?

C# 具有多个通知的.NET SqlDependency与高速轮询?,c#,.net,sql-server,sql-server-2012,sqldependency,C#,.net,Sql Server,Sql Server 2012,Sqldependency,我有一个小桌子(大约200行),它一直在变化(每秒几次)。 我一直在寻找一种解决方案,在每次数据库发生变化时,我都可以收到来自数据库的通知,而不是轮询它(比方说每秒5-10次) 此外,我希望每次只接收更改的行,而不获取整个表——我发现利用SqlDependency类实现这一点相当困难 需要考虑的几件事: 除了使用数据库之外,我无法控制表中的更改,也无法接收数据 我打算建立一个服务,将广播的变化到我的前端服务器 有没有一种方法可以使用SqlDependency实现这一点 在这种情况下,最佳做法是什


我有一个小桌子(大约200行),它一直在变化(每秒几次)。
我一直在寻找一种解决方案,在每次数据库发生变化时,我都可以收到来自数据库的通知,而不是轮询它(比方说每秒5-10次)

此外,我希望每次只接收更改的行,而不获取整个表——我发现利用SqlDependency类实现这一点相当困难

需要考虑的几件事:

  • 除了使用数据库之外,我无法控制表中的更改,也无法接收数据
  • 我打算建立一个服务,将广播的变化到我的前端服务器
  • 有没有一种方法可以使用SqlDependency实现这一点

    在这种情况下,最佳做法是什么

    顺便说一句:我正在使用SQL server 2012


    提前感谢

    SqlDependency只会通知您发生了更改,您必须重新读取整个表。它在通知率较低的情况下运行良好。在很高的速率下,您必须考虑通知具有显著的成本。有关SqlDependency如何工作的更多详细信息,请参见。正如您所看到的,成本非常高:

    • 设置通知(写入sys.dm_qn_订阅和SSB系统表)
    • 触发通知(写入sys.dm_qn_订阅)
    • 传递通知(写入SSB系统表、目标队列)
    • 接收通知(写入目标队列、SSB系统表)
    这是相当多的写作,如果你不断得到通知,成本将迅速增加


    但真正的问题是,您希望在应用程序中如何准确地对恒定的变化率作出反应?你想知道什么,事情变了?嗯,你知道,它总是这样,只要应用程序需要数据,它最好读取最新状态,因为它肯定会改变。投票也没有意义。听起来您真正想要的可能是更改发起人提供的基于自定义的更改。

    您使用的是哪种类型的应用程序?我打算使用windows服务,它将从服务器广播更改。在我处理通知时,这些更改几乎没有用。在此期间可能发生了变化(我使用的是SQL Server 2005),但我们返回了轮询。@ThorstenDittmar,无用的,如中所示,
    不会在发生变化时通知
    ,或者
    不是问题的解决方案
    @adrianm无用的,如中所示“如果它工作可靠,并且没有突然停止通知而没有任何明显的原因,本可以解决我们的问题。”谢谢!由于您的回答,我编辑了这个问题。“更改跟踪”能否实现目标?根据您所写的,当某些内容发生更改时,我如何从数据库收到通知?我已经阅读了”变更跟踪“它使我能够获得差异,但在差异发生时不会引起注意,因此我仍然需要进行投票。。。我说的对吗?您仍然需要以所需的频率轮询更改跟踪数据。它将解决检测更改内容的问题。@RemusRusanu是Service Broker External Activator,它激发exe,并且此exe将数据公开给客户端,对于这种情况是否有效?