Gestion des connexions SqlDependency pour des performances optimales de SQL Server
Une gestion inefficace des SqlDependency
objets dans SQL Server peut entraîner des fuites de mémoire et des goulots d'étranglement des performances. Cet article détaille les stratégies permettant de nettoyer efficacement ces ressources après le traitement des événements.
Le problème : accumuler des ressources
L'utilisation de SqlDependency
crée des groupes de conversation et des points de terminaison dans la base de données. Ces ressources s'accumulent au fil du temps, épuisant potentiellement la mémoire, notamment dans les éditions SQL Server Express.
Solution de nettoyage de base de données
Le script SQL suivant identifie et supprime les points de terminaison de conversation inactifs, libérant ainsi de la mémoire :
<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>
Limites des dépendances SQL
La classe standard SqlDependency
a des limites :
Une alternative supérieure : SqlDependencyEx
SqlDependencyEx
, une bibliothèque open source, offre des fonctionnalités améliorées :
<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>
En utilisant la procédure de nettoyage de la base de données ou en migrant vers SqlDependencyEx
, vous pouvez gérer efficacement les ressources SqlDependency
, évitant ainsi les problèmes de mémoire et optimisant les performances de SQL Server.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!