Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengoptimumkan Penggunaan Memori Pelayan SQL Apabila Menggunakan SqlDependency?
Mengoptimumkan Penggunaan Memori SQL Server dengan SqlDependency
Cabaran:
Menggunakan kelas SqlDependency
SQL Server selalunya mengakibatkan kebocoran memori. Objek SqlDependency
yang tidak digunakan terkumpul, membawa kepada penggunaan sumber yang tinggi dan potensi keletihan memori, terutamanya ketara dalam SQL Server Express. Mengalih keluar kebergantungan usang ini dengan cekap adalah kunci untuk mengekalkan prestasi optimum.
Penyelesaian:
Hanya menghentikan kebergantungan dengan SqlDependency.Stop()
tidak mencukupi; kumpulan perbualan dan titik akhir kekal dalam pangkalan data. Untuk menangani perkara ini, jalankan skrip SQL berikut untuk membersihkan sumber yang berlarutan ini:
<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 Unggul: SqlDependencyEx
Kelas SqlDependency
standard mempunyai had, terutamanya ketidakupayaannya untuk menjejaki semua pengubahsuaian jadual dengan pasti semasa langganan semula. Alternatif yang lebih mantap ialah SqlDependencyEx
, penyelesaian sumber terbuka yang menggunakan pencetus pangkalan data dan pemberitahuan Broker Perkhidmatan asli. Ini memberikan pemberitahuan perubahan yang lebih dipercayai dan mengelakkan masalah memori yang wujud dalam pelaksanaan Microsoft.
Berikut ialah 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 detection. Thread.Sleep(1000); } Assert.AreEqual(changesCount, changesReceived);</code>
Pendekatan ini memastikan pemberitahuan perubahan data tepat pada masanya dan mengurangkan isu memori yang berkaitan dengan kelas SqlDependency
terbina dalam dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Penggunaan Memori Pelayan SQL Apabila Menggunakan SqlDependency?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!