(Win/C#/. Net) 애플릿은 시간별 간격으로 폴링해야합니다 - 최상의 방법에 대한 권장 사항?

StackOverflow https://stackoverflow.com/questions/1538925

  •  20-09-2019
  •  | 
  •  

문제

애플릿은 1-4 시간마다 디렉토리의 존재를 위해 설문 조사를해야하며, 발견되지 않은 경우 몇 개의 이메일/넷 보내기를 보냅니다. 아직 정확한 간격은 확실하지 않지만 1 시간보다 짧지는 않습니다. 전반적인 "직업"은 가까운 미래에 영구적이고 지속적으로 실행됩니다. Applet은 Win2K3 서버에서 실행되며 (매우 가벼운) 사용자 사용 패턴을 기반으로 기본 서버 기능을 사용하여 눈에 띄는 방식으로 방해 할 것입니다. 물론 잘 행동하기를 원합니다! 결국이를 구현을 결국 WIN 서비스로 고려했지만 여러 가지 이유로 첫 번째 구현은 콘솔 앱이 될 것입니다.

시스템 리소스 사용, 특히 CPU 및 RAM 측면에서 가장 희박 할 구현을 찾습니다. 타이밍/폴링 구현 대 CPU 사용에 대해 가장 우려합니다. 객체, GUI 등이 많지 않기 때문에 RAM 사용량은 많은 문제가되지 않아야하지만 장기적으로 .exe (장기적 .EXE로 구현할 경우 쓰레기 수집을 특별히 고려해야합니다). 몇 달/년의 의미에서)?

FileSystemWatcher?
System.Timers.Timer?
Thread.sleep?
다른?

실제로,이 글을 쓸 때,이 유형의 작업을 위해 이미 발명 된 많은 기존의 "휠"을 재사용하는 관점에서 가장 간단한 구현은 전혀 설문 조사가 아니라 단순히 시작하도록 설계하는 것입니다. 작업을 수행하고 닫히고 Windows 예약 작업 인프라가 타이밍 측면을 처리하도록합니다. 그러나 나는 향후 참조를 위해 그 아이디어 + 일반 정보의 검증을 얻기 위해 어쨌든 게시했습니다. 타이!

도움이 되었습니까?

해결책

Windows Scheduled Task는 확실히 갈 길입니다. 그리고 Thread.sleep (n)는 분명합니다 ~ 아니다 가는 길. ㅏ System.Timers.Timer 3600000의 초기 간격으로 애플리케이션 내 에서이 작업을 수행하려는 경우 갈 수있는 방법 일 것입니다. 각 경과 이벤트에서 타이머를 비활성화하고 필요한 코드를 수행 한 다음 타이머를 다시 활성화해야합니다. 다음 시간에 시간과 동일한 간격으로 현재 시스템 시간을 뺀 것입니다. 그렇지 않으면 타이머가 시스템 시간과 동기화되지 않아 드리프트합니다 (이는 목적에 중요하지 않을 수 있지만이 경우에는 지옥에 포함됩니다).

다른 팁

Windows Scheduling Services를 사용하여 콘솔 앱 실행을 예약하십시오. directory.exists를 사용하여 디렉토리를 간단히 확인하고 필요에 따라 이메일을 보내십시오.

헤드리스 애플리케이션 (이벤트 로그 또는 선택한 싱크에 로그)으로 실행되도록 설계하고 작업 스케줄러가 작업을 수행하고 시간에 호출하도록합니다.

과도하게 복잡 할 필요가 없습니다.

과거에는 단순히 콘솔 애플리케이션을 작성하고 Windows 예약 작업에서 실행하도록하여 이와 같은 작업을 처리했습니다. 그렇게하면 작업을 수행 한 다음 메모리에서 내릴 수 있습니다. 또한 서버에 수행 해야하는 작업이 시스템 업그레이드와 같은 경우 예정된 작업을 일시적으로 비활성화하는 것이 쉽습니다. 또한 일정이 변경되어야하며 (더 많거나 자주) 예정된 작업 인터페이스는 이미 여러 실행을 설명합니다.

우리는 몇 가지 이유로 Windows 서비스 (향후 구현이있을 수 있음)와 유사한 도구를 작성하려고 노력했습니다.

  • net.exe를 통한 간단한 원격 관리 (및 결국 PowerShell)
  • 쉬운 모니터링을 통해 시스템 센터 운영 관리자 (이전 엄마)
  • 필요한 경우 데이터/객체를 캐시 할 수 있습니다
  • 표준화

우리는 이러한 프로젝트를 만들기위한 프레임 워크와 관련 템플릿을 개발했습니다. 이렇게하면 각 프로젝트가 폴링 간격의 구성을 처리 할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top