Comment puis-je nettoyer le SQL Server pour se débarrasser des objets SqlDependency
expirés? Après avoir reçu l'événement de l'objet SqlDepedency
, je dois en créer un nouveau avant de pouvoir obtenir un nouvel événement. Toutefois, l'utilisation de la mémoire du processus SQL Server grimpe jusqu'à ce qu'il soit épuisé de la mémoire autorisée (SQL Server Express). Comment puis-je me débarrasser des anciennes requêtes?Comment nettoyer SqlDependency à partir de la mémoire SQL Server?
code:
// Func: RegisterTableListener
using (SqlConnection cn = new SqlConnection(Properties.Settings.Default.DatabseEventConnectionString))
{
if (cmd == null)
{
cmd = cn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT HostName, LastStatus, LastDetails, xml FROM dbo.[SystemTable]";
}
lock (cmd)
{
cmd.Connection = cn;
cn.Open();
cmd.Notification = null;
// creates a new dependency for the SqlCommand
if (dep == null)
dep = new SqlDependency(cmd);
// creates an event handler for the notification of data
// changes in the database.
dep.OnChange += new OnChangeEventHandler(dependency_OnChange);
using (SqlDataReader reader = cmd.ExecuteReader())
{
// code here to read
}
}
}
// Func dependency_OnChange
//SqlDependency dep = sender as SqlDependency;
dep.OnChange -= dependency_OnChange;
RegisterTableListener();
Comment créez-vous les objets 'SqlDependency'? S'il vous plaît poster votre code. Les disposez-vous correctement? – Oded
Je mets à jour mon commentaire avec du code quand je serai au travail demain. Sudo: SqlDependency dep = nouvelle SqlDependency (cmd); dep.OnChange + = amusant; SqlDependency n'implémente pas IDisposable – JeremyK
J'ai mis à jour avec du code. Même lorsque je lance une seule instance d'un SqlDepdency et que j'appelle Stop et Start à chaque fois, la mémoire grimpe. Je n'ai aucune idée de ce qui se passe. – JeremyK