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