Isunya:
ObjekSQL Server SqlDependency
kekal dalam ingatan walaupun selepas tamat tempoh, membawa kepada peningkatan penggunaan memori dan kemungkinan ranap pelayan. Artikel ini menggariskan cara untuk mengalih keluar pertanyaan berlarutan ini secara proaktif.
Penyelesaian:
Walaupun selepas menggunakan SqlDependency.Stop()
, baki—kumpulan perbualan dan titik akhir—kekal dalam pangkalan data. Untuk membetulkannya, laksanakan skrip SQL berikut:
<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
Kekurangan:
Had utama SqlDependency
ialah liputan pemberitahuannya yang tidak lengkap untuk semua pengubahsuaian jadual semasa langganan semula.
Alternatif Unggul: SqlDependencyEx
Pustaka SqlDependencyEx
sumber terbuka memanfaatkan pencetus pangkalan data dan pemberitahuan Broker Perkhidmatan untuk mengatasi kelemahan SqlDependency
. Berikut ialah contoh penggunaan ilustrasi:
<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>
Menggunakan SqlDependencyEx
menawarkan penyelesaian yang lebih mantap untuk menjejaki perubahan jadual sambil menghalang masalah berkaitan memori yang wujud dalam kelas SqlDependency
standard.
Atas ialah kandungan terperinci Bagaimana untuk Membersihkan Objek SqlDependency yang Tamat Tempoh dalam Pelayan SQL untuk Mengelakkan Kebocoran Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!