SqlTableDependency保留一些对象并减慢sql响应

时间:2018-09-30 16:46:04

标签: c# sql-server service-broker

我使用SqlTableDependency来监视和接收有关记录表更改的通知,几天后,我的应用程序运行速度非常慢,当我在SQL Server Management Studio中打开数据库时,看到很多过程和其他一些对象用SqlTableDependency创建的文件仍保留在数据库中,该如何解决?

看到这个:

enter image description here

根据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中,而当发生错误时,我继续循环以再次启动,这就是我的全部代码!

0 个答案:

没有答案