ホームページ > バックエンド開発 > C++ > SQL Server で期限切れの SqlDependency オブジェクトをクリーンアップしてメモリ リークを防ぐ方法

SQL Server で期限切れの SqlDependency オブジェクトをクリーンアップしてメモリ リークを防ぐ方法

Susan Sarandon
リリース: 2025-01-12 13:01:47
オリジナル
397 人が閲覧しました

How to Clean Up Expired SqlDependency Objects in SQL Server to Prevent Memory Leaks?

メモリ リークを回避するために SQL Server で期限切れの SqlDependency オブジェクトに対処する

問題:

SQL Server の SqlDependency オブジェクトは有効期限が切れた後もメモリ内に残り、メモリ使用量が増加し、サーバーがクラッシュする可能性があります。 この記事では、これらの残留クエリを積極的に削除する方法について概要を説明します。

解決策:

SqlDependency.Stop() を採用した後でも、残りの部分 (会話グループとエンドポイント) はデータベース内に残ります。 これを修正するには、次の 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>
ログイン後にコピー

SqlDependency 欠点:

SqlDependency の主な制限は、再サブスクリプション中のすべてのテーブル変更に対する通知範囲が不完全であることです。

優れた代替案: SqlDependencyEx

オープンソースの SqlDependencyEx ライブラリは、データベース トリガーと Service Broker 通知を利用して SqlDependency の欠点を克服します。 以下に使用例を示します:

<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 modifications.
    MakeTableInsertDeleteChanges(changesCount);

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

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

SqlDependencyEx を採用すると、標準の SqlDependency クラスに固有のメモリ関連の問題を回避しながら、テーブルの変更を追跡するためのより堅牢なソリューションが提供されます。

以上がSQL Server で期限切れの SqlDependency オブジェクトをクリーンアップしてメモリ リークを防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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