Come si pulisce SQL Server per eliminare gli oggetti SqlDependency
scaduti? Dopo aver ricevuto l'evento dall'oggetto SqlDepedency
, è necessario crearne uno nuovo prima di poter ottenere un nuovo evento. Tuttavia, l'utilizzo della memoria del processo di SQL Server sale fino a quando non esaurisce la memoria consentita (SQL Server Express). Come faccio a sbarazzarmi di vecchie query?Come si pulisce SqlDependency dalla memoria di SQL Server?
Codice:
// 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();
Come si creano gli oggetti 'SqlDependency'? Per favore pubblica il tuo codice. Li stai smaltendo correttamente? – Oded
Ill aggiorno il mio commento con il codice quando sarò al lavoro domani. Sudo: SqlDipendenza dep = new SqlDependency (cmd); dep.OnChange + = fun; SqlDependency non implementa IDisposable – JeremyK
Ho aggiornato con il codice. Anche quando eseguo solo un'istanza di SqlDepdency e chiamiamo Stop and Start ogni volta, la memoria sale. Non ho idea di cosa stia succedendo. – JeremyK