Jak wyczyścić serwer SQL, aby pozbyć się wygasłych obiektów SqlDependency
? Po otrzymaniu zdarzenia od obiektu SqlDepedency
muszę utworzyć nowy przed uzyskaniem nowego zdarzenia. Jednak użycie pamięci procesu SQL Server wspina się, dopóki nie zabraknie dozwolonej pamięci (SQL Server Express). Jak pozbyć się starych zapytań?Jak wyczyścić SqlDependency z pamięci programu SQL Server?
Kod:
// 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();
Jak tworzysz obiekty 'SqlDependency'? Proszę zaksięguj swój kod. Czy je prawidłowo pozbywasz? – Oded
Zły zaktualizuję mój komentarz kodem, kiedy jutro przyjadę do pracy. Sudo: SqlDependency dep = new SqlDependency (cmd); dep.OnChange + = zabawa; SqlDependency nie implementuje IDisposable – JeremyK
Zaktualizowałem za pomocą kodu. Nawet gdy uruchamiam tylko jedną instancję SqlDepdency i wywołuję za każdym razem Stop i Start, pamięć wspina się. Nie mam pojęcia, co się dzieje. – JeremyK