ホームページ > データベース > mysql チュートリアル > 期限切れの SqlDependency オブジェクトを SQL Server メモリから効果的に削除するにはどうすればよいですか?

期限切れの SqlDependency オブジェクトを SQL Server メモリから効果的に削除するにはどうすればよいですか?

DDD
リリース: 2025-01-15 11:53:47
オリジナル
451 人が閲覧しました

How to Effectively Purge Expired SqlDependency Objects from SQL Server Memory?

期限切れの SqlDependency オブジェクトを SQL Server メモリから消去しています

SQL Server で SqlDependency オブジェクトを使用するには、期限切れの依存関係によるメモリ リークを防ぐために慎重な管理が必要です。この記事では、これに対処するための効果的な戦略について詳しく説明します。

SqlDependency のクリーンアップ制限について理解する

SqlDependency は期限切れの接続を自動的に削除しません。 Stop() が呼び出され、関連付けられた SqlCommand および SqlConnection オブジェクトが解放された後でも、会話グループとエンドポイントはデータベースに残ります。 この蓄積により、大量のサーバー メモリが消費されます。

手動クリーンアップ用の SQL クエリ

未使用の会話エンドポイントを手動でクリアしてメモリを解放するには、データベースで次の SQL コードを実行します。

<code class="language-sql">DECLARE @ConvHandle uniqueidentifier
DECLARE Conv CURSOR FOR
SELECT CEP.conversation_handle FROM sys.conversation_endpoints CEP
WHERE CEP.state = 'DI' or CEP.state = 'CD'
OPEN Conv;
FETCH NEXT FROM Conv INTO @ConvHandle;
WHILE (@@FETCH_STATUS = 0) BEGIN
    END CONVERSATION @ConvHandle WITH CLEANUP;
    FETCH NEXT FROM Conv INTO @ConvHandle;
END
CLOSE Conv;
DEALLOCATE Conv;</code>
ログイン後にコピー

代替: SqlDependencyEx クラス

オープンソースの SqlDependencyEx クラスの使用を検討してください。 データベース トリガーとテーブル変更イベントのネイティブ Service Broker 通知を活用し、いくつかの利点を提供します。

  • 期限切れの依存関係の自動クリーンアップ。
  • 再サブスクリプション中のイベントを含む、包括的な変更追跡。

SqlDependencyEx の使用例

<code class="language-csharp">int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
          TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{
    sqlDependency.TableChanged += (o, e) => changesReceived++;
    sqlDependency.Start();

    // Simulate table changes.
    MakeTableInsertDeleteChanges(changesCount);

    // Allow time for change processing.
    Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);</code>
ログイン後にコピー

これらのメソッドを採用すると、SqlDependency オブジェクトのメモリ管理が効率的になり、SQL Server アプリケーションのパフォーマンスが最適化されます。

以上が期限切れの SqlDependency オブジェクトを SQL Server メモリから効果的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート