5

データベースの変更を監視するために SqlDependency を使用しています。例を理解しやすくするために、これらは株価であるとしましょう。また、アプリケーションは (別の) SqlDependeny-Object を使用して、アプリケーションにキャッシュされている静的データへの変更を監視します。

私がしていることは、アプリケーションを起動するときに依存関係を開始し、アプリケーションを閉じるときにSqlDependency.Start()呼び出すことです。SqlDependeny.Stopこれまでのところ、すべてがうまく機能しています。

これで、ユーザーが銘柄記号を選択すると、別の SqlDependency が設定され、変更が通知され、それに対してアクションを実行できるようになりました。ユーザーが追跡したいシンボルを変更すると、新しい SqlDependency を設定する必要があり、古い SqlDependency をクリアする必要があります。

私の質問は:それは本当ですか?また、特定の依存関係をクリアするにはどうすればよいですか? SqlDependency.Stop()静的メソッドであり、すべての依存関係を停止します。それでも、SQL サーバーの通知サブスクリプションが本当にクリアされているのか、タイムアウトになるのを待っているだけなのか、まったくわかりません。

これはすべて、SqlDependency を使用してキャッシュを行う正しい方法なのか、それともこれを達成するための優れた簡単な方法があるのか​​という疑問を提起します。

4

1 に答える 1

2

なぜここに電話する必要があるのか​​ わかりませんStopSqlDependency新しいシンボルの新しいインスタンスを作成し、古いシンボルのインスタンスへの参照を削除するだけで、ガベージ コレクションが時間内にクリーンアップできるようになります。古いインスタンスのイベントへのサブスクリプションも削除する限りOnChange、このアプローチはうまくいくはずです。

ただし、多くのユーザーをサポートしたい場合、どのようにスケーリングするかはわかりません。その場合、一元化されたキャッシュ変更検出とマージ スキームの方が適している可能性があります。

于 2011-05-02T18:18:20.503 に答える