> 백엔드 개발 > C++ > 메모리 누수를 방지하기 위해 SQL Server에서 만료된 SqlDependency 개체를 정리하는 방법은 무엇입니까?

메모리 누수를 방지하기 위해 SQL Server에서 만료된 SqlDependency 개체를 정리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-12 13:01:47
원래의
439명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿