Rumah >pangkalan data >tutorial mysql >Bagaimana Berkesan Membersihkan Objek SqlDependency yang Tamat Tempoh daripada Memori SQL Server?

Bagaimana Berkesan Membersihkan Objek SqlDependency yang Tamat Tempoh daripada Memori SQL Server?

DDD
DDDasal
2025-01-15 11:53:47450semak imbas

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

Mengosongkan Objek SqlDependency Tamat Tempoh daripada Memori Pelayan SQL

Menggunakan objek SqlDependency dalam SQL Server memerlukan pengurusan yang teliti untuk mengelakkan kebocoran memori daripada kebergantungan tamat tempoh. Artikel ini memperincikan strategi berkesan untuk menangani perkara ini.

Memahami Had Pembersihan SqlDependency

SqlDependency tidak mengalih keluar sambungan yang telah tamat tempoh secara automatik. Walaupun selepas Stop() dipanggil dan dikaitkan SqlCommand dan SqlConnection objek dikeluarkan, kumpulan perbualan dan titik akhir kekal dalam pangkalan data. Pengumpulan ini menggunakan memori pelayan yang ketara.

Pertanyaan SQL untuk Pembersihan Manual

Untuk mengosongkan titik akhir perbualan yang tidak digunakan dan memori percuma secara manual, jalankan kod SQL ini dalam pangkalan data anda:

<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>

Alternatif: Kelas SqlDependencyEx

Pertimbangkan untuk menggunakan kelas sumber terbuka SqlDependencyEx. Ia memanfaatkan pencetus pangkalan data dan pemberitahuan Broker Perkhidmatan asli untuk acara perubahan jadual, menawarkan beberapa kelebihan:

  • Pembersihan automatik kebergantungan tamat tempoh.
  • Penjejakan perubahan yang menyeluruh, termasuk acara semasa langganan semula.

Contoh Menggunakan 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>

Menggunakan kaedah ini memastikan pengurusan memori yang cekap untuk objek SqlDependency dan prestasi aplikasi SQL Server yang optimum.

Atas ialah kandungan terperinci Bagaimana Berkesan Membersihkan Objek SqlDependency yang Tamat Tempoh daripada Memori SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn