Le problème :
Les objets SqlDependency
de SQL Server persistent en mémoire même après leur expiration, ce qui entraîne une utilisation croissante de la mémoire et des pannes potentielles du serveur. Cet article explique comment supprimer de manière proactive ces requêtes persistantes.
Résolution :
Même après avoir utilisé SqlDependency.Stop()
, les restes (groupes de conversation et points de terminaison) restent dans la base de données. Pour remédier à cela, exécutez le script SQL suivant :
<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
Lacunes :
Une limitation clé de SqlDependency
est sa couverture de notification incomplète pour toutes les modifications de table lors du réabonnement.
Une alternative supérieure : SqlDependencyEx
La bibliothèque open source SqlDependencyEx
exploite les déclencheurs de base de données et les notifications de Service Broker pour surmonter les lacunes de SqlDependency
. Voici un exemple d'utilisation illustratif :
<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>
L'emploi SqlDependencyEx
offre une solution plus robuste pour suivre les modifications de table tout en évitant les problèmes liés à la mémoire inhérents à la classe SqlDependency
standard.
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!