Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Многопоточная работа с БД(EF)


Автор: kiler4747 12.5.2013, 00:42
Хочу узнать как правильно работать с БД(EF) в моногопоточном приложении.
Делал так: при добавлении/удалении/обновлении создается новый поток, в этом потоке создается контекст и происходит изменение БД, затем через событие обновляется интерфейс:
Код

void UpdateViewSource()
        {
            Dispatcher.Invoke( new Action(delegate()
                {
                                        using (var context = new NewsContext())
                        {
                                  chanalsViewSource.Source = context.Channels.Include("Articls").ToList();
                           }
                }));
            
        }

что приводит к зависанию интерфейса, а при большом количестве операций требуется большое количество памяти.

Автор: jonie 20.6.2013, 10:14
Цитата(kiler4747 @  12.5.2013,  01:42 Найти цитируемый пост)

что приводит к зависанию интерфейса, а при большом количестве операций требуется большое количество памяти. 

при большой нагрузке на диспатчер он будет ставить запросы в очередь-  "превеД" - всё подвиснет. Обычно не требуется подобное поведение (если, конечно, вы не DDoS-ите базу). Обновляйте UI не на каждый чих, а, например, по таймеру - пользователь врядли увидит что-то в быстро меняющимся мире...

Кроме того: вы в UI потоке производите и вычитку данных, зачем?
код перепишите так:
Код

void UpdateViewSource()
        {
//some nonUI thread
                                        using (var context = new NewsContext()) var data = context.Channels.Include("Articls").ToList();
            Dispatcher.Invoke( new Action(delegate()
                {
                        {
                                  chanalsViewSource.Source = data; //UI thread
                           }
                }));
            
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)