Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membersihkan Objek SqlDependency yang Tamat Tempoh daripada Memori SQL Server?
Mengatasi Kebocoran Memori yang Disebabkan oleh Objek SqlDependency dalam SQL Server
Objek SqlDependency, penting untuk memantau perubahan data SQL Server, boleh terkumpul dalam ingatan, memberi kesan negatif kepada prestasi pelayan. Artikel ini memperincikan cara mengalih keluar objek tamat tempoh ini dengan berkesan.
Memahami Isu
Apabila objek SqlDependency mencetuskan peristiwa, objek baharu diperlukan untuk pemantauan berterusan. Objek lama, bagaimanapun, kekal dalam ingatan, berpotensi membawa kepada keletihan sumber.
Tatacara Pembersihan Memori
Skrip SQL berikut mengenal pasti dan menamatkan titik akhir perbualan yang tidak aktif, membebaskan memori yang digunakan:
<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>
Skrip ini menyasarkan titik akhir perbualan dalam keadaan terputus atau dibatalkan.
Pendekatan Alternatif: SqlDependencyEx
Untuk kefungsian yang lebih baik dan untuk mengelakkan masalah yang mungkin wujud dalam kelas SqlDependency standard, pertimbangkan untuk menggunakan SqlDependencyEx, alternatif sumber terbuka. Penyelesaian ini memanfaatkan pencetus pangkalan data dan pemberitahuan Broker Perkhidmatan asli.
Contoh Ilustrasi menggunakan SqlDependencyEx
Berikut ialah contoh kod yang menunjukkan 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 modifications. MakeTableInsertDeleteChanges(changesCount); // Allow time for change detection. Thread.Sleep(1000); } Assert.AreEqual(changesCount, changesReceived);</code>
Ini mempamerkan pemberitahuan perubahan masa nyata menggunakan SqlDependencyEx.
Atas ialah kandungan terperinci Bagaimana untuk Membersihkan Objek SqlDependency yang Tamat Tempoh daripada Memori SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!