SqlTableDependency остается некоторыми объектами и замедляет ответ sql - PullRequest
0 голосов
/ 30 сентября 2018

Я использую SqlTableDependency для мониторинга и получения уведомлений об изменении таблицы записей, через несколько дней мое приложение сильно замедлилось, когда я открываю свою базу данных в SQL Server Management Studio, я вижу, что многие процедуры и некоторые другие объекты, которые создалис SqlTableDependency остались в базе данных, как я могу ее решить?

См. это:

enter image description here

По запросу Дана Гусмана,я добавляю мой код ниже:

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);

, как вы видите в приведенном выше коде, я инициализирую объект SqlTableDependency в BackgroundWorker, а затем передаю его моему классу и, наконец, располагаю объект BackgroundWorker, иногда при создании объекта или его запускевозникает ошибка, поэтому я помещаю ее в блок try / catch, и, когда возникает ошибка, я продолжаю цикл для запуска снова, и это весь мой код!

...