2

データベース (SQL Server 2008) のテーブルの 1 つに新しいレコードが追加されたときに、ソフトウェア (C#、.NET 3.5) のユーザー (約 100 クライアント) に通知する必要があります。私が正しく理解している場合、そのような操作はキャッシュの無効化と見なされるはずです。これはまさにそのSqlDependencyためのものです。間違っている場合は、これを修正してください。

そのために、私は2つのオプションを見ることができます:

  1. SqlDependencyこれにより、実質的にリアルタイムの通知を受け取ることができます。
  2. タイマーでテーブルをチェックしています。

しかし、私はこれまで使用SqlDependencyしたことがなく、実際にどれほど信頼できるのかわかりませんか? つまり、アプリケーションSqlDependency.Start()を 1 日の始まりだけに実行させて、10 時間何があっても通知をリッスンできるようにすることはできますか? もちろん、サービス クエリの通知に正しく対応しなければならないことは理解しています。また、データベースのパフォーマンスの観点から、タイマーによるクエリと比較して、そうする方が本当に良いのでしょうか? 実際にデータベースに大きな違いはありますか?

SqlDependencyすべてのユーザーが接続を開き、5 分ごとに同じデータベース内の同じテーブルをクエリすることが最善のアイデアであるかどうかわからないため、主に使用を検討しています。

4

1 に答える 1

0

SqlDependency クラスのパフォーマンス メトリックも探していますが、残念ながら見つかりませんでした。ただし、推測する必要がある場合は、他のすべてが同じままであることを考えると、SqlDependency は外部ポーリング メカニズムよりも効率的であると言えます (ポーリング間隔 = SqlDependency の内部ポーリング間隔を含む)。これは、外部からポーリングする場合、各ポーリング リクエストのオーバーヘッドを考慮する必要があるためです。SqlDependency を使用すると、サービスはオーバーヘッドを削減するように最適化されます (少なくとも、オーバーヘッドは外部ポーリングよりも少なくなります)。ほんの 2 セントですが、SQLDependency の使用とテーブルの定期的なポーリング (パフォーマンスへの影響)で、効果がまったく逆であることを読みました。私は自分でテストを行い、自分のシナリオで機能するものを投稿します。

于 2013-09-19T21:07:58.103 に答える