¿Cómo limpio el servidor SQL para deshacerme de los objetos caducados SqlDependency
? Después de recibir el evento del objeto SqlDepedency
, necesito crear uno nuevo antes de poder obtener un nuevo evento. Sin embargo, el uso de la memoria del proceso de SQL Server sube hasta que se agote la memoria permitida (SQL Server Express). ¿Cómo me deshago de las consultas antiguas?¿Cómo limpio SqlDependency desde la memoria de SQL Server?
Código:
// 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();
¿Cómo está creando los objetos 'SqlDependency'? Por favor publique su código. ¿Los está deshaciendo de manera adecuada? – Oded
Actualizaré mi comentario con el código cuando llegue a trabajar mañana. Sudo: SqlDependency dep = new SqlDependency (cmd); dep.OnChange + = diversión; SqlDependency no implementa IDisposable – JeremyK
He actualizado con el código. Incluso cuando ejecuto solo una instancia de SqlDepdency y llamo Stop and Start cada vez, la memoria aumenta. No tengo ni idea de lo que está sucediendo. – JeremyK