2011-11-10 2 views
4

아카이브를 모니터링하고 기록 된 값 중 하나가 특정 범위를 벗어나면 특정 사람에게 전자 메일 및 팝업을 통해 경고하는 현재 인턴십에서 Windows 서비스가 제공되었습니다. 현재 타이머를 사용하여 매 30 초마다 보관 파일을 검사하며 어떤 "태그"가 모니터링되는지에 따라 시간을 선택할 수 있도록 업데이트 할 수 있는지 묻습니다. XML 파일을 사용하여 모니터링중인 태그를 추적합니다. 이 서비스에 여러 타이머를 작성하는 것이 가장 효율적인 방법일까요? 나는 어떤 접근 방식을 취해야하는지 잘 모르겠습니다.여러 타이머가있는 Windows 서비스

서비스는 .NET 3.5를 사용하여 C#으로 작성되었습니다.

답변

2

세분화 정도에 따라 원하는 시간 간격의 공통 요소 인 단일 타이머를 사용할 수 있습니다. 그들은 XML 파일에 각 아카이브가 수분마다 검사된다는 것을 넣고 싶다고합시다. 1 분에 한 번씩 꺼지는 타이머를 설정하고 각 타이머를 수행 한 이후의 시간과 수행 여부를 확인합니다.

다시 설계 할 기회가 있다면 서비스에서 예약 된 작업으로 이동할 것입니다. 하나의 작업이 하나의 아카이브를 수행하도록 작성하십시오. 그런 다음 예약 된 작업을 설정하는 컨트롤러 프로그램을 작성하십시오 (중지하고 변경 등). Windows 7의 예약 된 작업에 대한 API는 훌륭하고 이해하기 쉽지만 서비스와 달리 "하지 마십시오 작업을 실행할 기회를 놓친 경우 수행 할 작업에 대한 기본 설정과 함께 컴퓨터가 배터리로 작동하는 경우 "또는"시스템이 유휴 상태 인 경우에만 수행하십시오. " 자신의 일정에 따라 각각 동일한 API를 사용하여 7 개 또는 8 개의 예약 된 작업을 수행하고 보관 경로와 이메일 주소를 전달하면 한 번에 모든 것을 저글링하려는 서비스보다 훨씬 간단합니다. 게다가 다른 자동 시작 서비스가 없으면 컴퓨터가 더 빨리 시작됩니다.

+0

예약 된 작업 아이디어를 확실히 살펴 보겠습니다. 3 명의 사람들이 하나의 공통 타이머를 사용하는 것에 관해서 똑같은 것을 말했기 때문에 이것이 현재로서는 가장 좋은 방법 일 것 같습니다. 감사! – dwf

1

효율적인가요? 아마 당신은 태그가 많을 때마다 각 타이머가 작지만 유한 한 자원을 사용하기 때문에 특히 그렇습니다.

대체 접근법은 매 초마다 하나의 타이머를 작동시키는 것일 수 있습니다. 그런 경우에는 미해결 요청 목록을 확인하십시오.

활성 스레드가 하나뿐이므로 문제가 발생하면 디버깅하기가 더 쉽습니다.

그러나 대부분의 코드 유지 관리 상황에서와 같이 코드는 기존 코드, 기능 및 더 편한 느낌에 따라 다릅니다.

1

최소한 공통 제수로 예정된 타이머 하나만 사용하는 것이 좋습니다.

예를 들어 초당 신호를 보내도록 타이머를 구성하고 타이머 틱 수를 계산하여 모든 간격 (1 초, 2 초, ...)을 처리 할 수 ​​있습니다.

관련 문제