我使用SqlTableDependency
来监视和接收有关记录表更改的通知,几天后,我的应用程序运行速度非常慢,当我在SQL Server Management Studio中打开数据库时,看到很多过程和其他一些对象用SqlTableDependency
创建的文件仍保留在数据库中,该如何解决?
看到这个:
根据Dan Guzman的要求,我在下面添加我的代码:
BackgroundWorker _bw_ProductBroker = new BackgroundWorker();
_bw_ProductBroker.DoWork += (a, b) =>
{
var _ProductMapper = new TableDependency.SqlClient.Base.ModelToTableMapper<ProductM>();
_ProductMapper.AddMappingAllProperties();
SqlTableDependency<ProductM> _Broker;
while (true)
try
{
b.Result = _Broker = new SqlTableDependency<ProductM>(MainVM.ConnectionString, _db.GetTableName<ProductM>(), mapper: _ProductMapper);
_Broker.OnChanged += ((NewAddFactorVM)b.Argument)._TblProductListener_OnChanged;
_Broker.OnStatusChanged += ((NewAddFactorVM)b.Argument)._TblProductListener_OnStatusChanged;
_Broker.Start();
break;
}
catch { Thread.Sleep(TimeSpan.FromSeconds(1)); continue; }
};
_bw_ProductBroker.RunWorkerCompleted += (a, b) =>
{
_TblProductListener = (SqlTableDependency<ProductM>)b.Result;
_bw_ProductBroker?.Dispose();
};
_bw_ProductBroker.RunWorkerAsync(this);
如上面的代码中所示,我在BackgroundWorker中创建了最初的SqlTableDependency对象,然后将其传递给我的类,最后处理了BackgroundWorker对象, 有时在创建对象或启动它时会发生错误,所以我将其放在try / catch中,而当发生错误时,我继续循环以再次启动,这就是我的全部代码!