2014-04-01 4 views
1

У меня есть служба Windows, которая производит опрос базы данных. Я использую EF6 и linq для выполнения своих запросов и обновлений и т. Д.EF6, опрос службы Windows и базы данных

Опрос должен быть как можно чаще, возможно, каждые 2 секунды или что-то в этой области.

Моя кишка говорит мне, что у меня есть одно соединение и держите его открытым, пока моя служба работает, однако что-то еще говорит мне открывать и закрывать соединение каждый раз. Я чувствую, что последнее замедлит его (это действительно замедлит это?).

Каковы наилучшие методы опроса базы данных в службе Windows? Должен ли я действительно часто опробовать мою базу данных?

ответ

3

Я думаю, вы должны часто использовать контекст и создавать новый каждый раз при опросе базы данных.

Основная причина заключается в том, что, если вы не отключите отслеживание объектов (это действительно подходит только для работы только для чтения), контекст становится все больше и больше с течением времени, при этом каждая последующая операция опроса загружает больше данных в кэш контекста. Как и увеличение памяти, это приводит к тому, что SaveChanges() замедляется, так как ObjectContext ищет изменения в объектах, которые к нему привязаны.

Если соединение по какой-либо причине потеряно, вам также будет сложно связать новое соединение с контекстом. Независимо от того, основываясь на моем собственном опыте, он ничего не замедлит, быстро построить любые объекты контекста EF после первого, потому что модель кэшируется при первой загрузке.

Я бы не стал беспокоиться о каждом опросе каждые 2 секунды. Это кажется мне вполне разумным.

В качестве альтернативы, если вы используете SQL Server, вы можете использовать Sql Dependency для запуска события при изменении данных, но опрос является наиболее надежным вариантом.

http://msdn.microsoft.com/en-us/library/62xk7953(v=vs.110).aspx

В качестве альтернативы, если вы решительно настроены против опроса, вы можете посмотреть на использование системы Message Broker, как RabbitMQ и обновление ваших приложений, чтобы использовать его, но будьте готовы потерять пару недель, содействующих выполнению инфраструктуры.

+0

Спасибо, что указали мне на SQL Dependency, это действительно очень полезно. Не могли бы вы рассказать о том, почему он не является надежным? Также вы использовали его с Entity Framework? – Johan

+0

Я видел экземпляры в производстве, где соединение SQL Dependency было потеряно и события не были запущены. Это немного похоже на FileSystemWatcher в том, что стоит подкрепить его менее частым опросом и часто обновлять зависимость/наблюдателя SQL. Я не использовал его с Entity Framework. Если вы пишете службу Windows или что-то в этом роде, она, скорее всего, будет отсутствовать в течение нескольких месяцев, а иногда никто не замечает, если она перестанет работать (т. Е. Сервис не «остановился», но он тоже ничего не делает!), поэтому я хотел бы охватить все базы. –

Смежные вопросы