Maison >base de données >tutoriel mysql >Comment purger efficacement les objets SqlDependency expirés de la mémoire SQL Server ?
Effacer les objets SqlDependency expirés de la mémoire SQL Server
L'utilisation d'objets SqlDependency dans SQL Server nécessite une gestion minutieuse pour éviter les fuites de mémoire dues aux dépendances expirées. Cet article détaille les stratégies efficaces pour gérer cela.
Comprendre les limites du nettoyage de SqlDependency
SqlDependency ne supprime pas automatiquement les connexions expirées. Même après que Stop()
est appelé et que les objets SqlCommand
et SqlConnection
associés sont libérés, les groupes de conversation et les points de terminaison persistent dans la base de données. Cette accumulation consomme une mémoire serveur importante.
Requête SQL pour le nettoyage manuel
Pour effacer manuellement les points de terminaison de conversation inutilisés et libérer de la mémoire, exécutez ce code SQL dans votre base de données :
<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>
Alternative : la classe SqlDependencyEx
Envisagez d'utiliser la classe SqlDependencyEx
open source. Il exploite les déclencheurs de base de données et les notifications natives de Service Broker pour les événements de modification de table, offrant plusieurs avantages :
Exemple d'utilisation de 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>
L'utilisation de ces méthodes garantit une gestion efficace de la mémoire pour les objets SqlDependency et des performances optimales des applications 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!