管理 SqlDependency 連線以獲得最佳 SQL Server 效能
SQL Server 中 SqlDependency
物件的低效率管理可能會導致記憶體洩漏和效能瓶頸。 本文詳細介紹了在事件處理後有效清理這些資源的策略。
問題:累積資源
使用 SqlDependency
在資料庫中建立對話群組和端點。 這些資源隨著時間的推移而積累,可能會耗盡內存,尤其是在 SQL Server Express 版本中。
資料庫清理解決方案
以下 SQL 腳本辨識並刪除不活動的對話端點,釋放記憶體:
<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>
Sql依賴限制
標準 SqlDependency
類別有限制:
更好的替代方案:SqlDependencyEx
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 notification. Thread.Sleep(1000); } Assert.AreEqual(changesCount, changesReceived);</code>
透過使用資料庫清理程式或遷移到SqlDependencyEx
,您可以有效管理SqlDependency
資源,防止記憶體問題並最佳化SQL Server效能。
以上是如何有效清除 SQL Server 中過時的 SqlDependency 連線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!