2014-04-01 2 views
1

데이터베이스를 폴링하는 Windows 서비스가 있습니다. 나는 폴링은 가능한 한 자주 할 필요가 등을 내 쿼리와 업데이트,EF6, Windows 서비스 및 데이터베이스 폴링

, 아마 2 초마다 또는 그 지역에서 뭔가를 EF6 및 LINQ를 사용하고 있습니다.

내 창자가 하나의 연결을 가지고 내 서비스가 실행되는 동안 그것을 열어 둘 나에게 말한다, 다른 그러나 뭔가 열고 연결마다 시간을 닫습니다 나에게 말한다. 나는 후자가 그것을 느리게 만들 것이라고 느낍니다. (이것이 정말로 많이 느려지 는가?). 그것은 윈도우 서비스 내에서 폴링에 데이터베이스를 때

가장 좋은 방법은 무엇입니까? 정말로 내 데이터베이스를 자주 폴링해야합니까?

답변

3

나는 자주 문맥을 처분하고 새로운 당신이 데이터베이스를 폴링 할 때마다 생성한다고 생각합니다.

주된 이유는 개체 추적 (실제로는 읽기 전용 작업에만 적합)을 사용하지 않으면 시간이 지남에 따라 컨텍스트가 커지고 연속적인 폴링 작업이 컨텍스트의 캐시에 더 많은 데이터를로드하기 때문입니다. 이로 인해 메모리가 증가 할뿐만 아니라 SaveChanges()는 ObjectContext가 연결된 객체의 변경 사항을 찾으면 느려집니다. 연결이 어떤 이유로 실패하면

은 또한 힘든 시간을 문맥에 새로운 연결을 연결을해야합니다. 그럼에도 불구하고 내 자신의 경험에 비추어 볼 때 아무 것도 느려지지 않을 것입니다. 첫 번째로드 후에 모델이 캐시되기 때문에 첫 번째 이후에 EF 컨텍스트 개체를 빠르게 구성 할 수 있습니다.

2 초마다 모든 폴링에 대해 걱정할 필요가 없습니다. 그것은 나에게 완전히 합당한 것처럼 보인다. 여담으로

, SQL Server를 사용하는 경우, 당신은 데이터 변경,하지만 폴링이 가장 신뢰할 수있는 옵션을 때 이벤트를 발생하려면 SQL 종속성을 사용할 수 있습니다. 폴링에 죽은 세트라면

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

또는, 당신은 RabbitMQ 같은 메시지 브로커 시스템을 사용하고 사용하도록 응용 프로그램을 업데이트 볼 수 있지만 구현 몇 주를 잃을 수 있도록 준비 하부 구조.

+0

SQL 종속성을 가리켜 주셔서 감사합니다. 실제로는 매우 유용합니다. 왜 믿을만하지 않은지 상세히 설명해 주시겠습니까? 또한 Entity Framework와 함께 사용 했습니까? – Johan

+0

SQL Dependency 연결이 끊어져 이벤트가 시작되지 않은 프로덕션 환경에서 인스턴스를 보았습니다. 빈번하지 않은 폴링으로 백업하고 SQL 종속성/감시자를 자주 재 작성하는 것이 중요하다는 점에서 FileSystemWatcher와 조금 다릅니다. Entity Framework에서 사용하지 않았습니다. Windows 서비스 또는 무언가를 작성하는 경우, 한 번에 몇 달 동안 무인 상태로있을 가능성이 있으며 때로는 작동이 멈추는 경우 (예 : 서비스가 "중지"되지 않았지만 아무 것도하지 않는 경우) 그래서 저는 모든 기지들을 다 다루고 싶습니다. –