2009-03-19 10 views
2

이것은 .NET 관련 질문이 아닐 수도 있습니다. 일부 가젯을 제어하기 위해 .NET 애플리케이션을 작성 중입니다. 가제트에 주기적으로 명령을 보냅니다 (500 밀리 초마다). 명령을 보내 자마자 타이머를 시작합니다. (.NET 스톱워치 클래스).NET Stopwatch 클래스 제한

가제트가 10 밀리 초 이내에 응답하지 않으면 명령을 다시 보냅니다. 응답하는 경우 계속 명령을 보내고 응답을 처리하여 가젯 상태를 계속 모니터링합니다.

나는이 가제트의 다른 일을하기 위해 2 개 또는 3 개의 스톱워치 타이머를 병렬로 실행하고 있습니다.

이제는 수천 개의 가제트를 모니터링하고 제어하고 싶습니다 (최대 5000 개까지 가능). 가젯에 대해 하나의 오브젝트를 작성하면 10000에서 15000 개의 스톱워치 오브젝트가 병렬로 실행됩니다. 스톱워치가 어떻게 작동하는지 잘 모르겠지만 하드웨어 타이머 나 시간을 추적 할 때 사용한다고 가정합니다.

제 질문은 Windows가 동시에 많은 수의 스톱워치를 처리 할 수 ​​있습니까?

+0

궁금한 점이 있습니다. 5000 대의 장치를 어떻게 한 대의 컴퓨터에 연결할 것입니까? –

+0

그들은 데이지 체인입니다! 12 개의 장치가 인터페이스 상자에 연결됩니다. 각 상자는 4 개의 다른 상자에 데이지 체인으로 연결할 수 있습니다. 각 가젯에는이 계층 구조에서 고유 한 주소 지정 가능한 ID가 있습니다. –

답변

8

이 디자인을 다시 생각해보십시오. 첫째, 스톱워치가 말하는대로 작동합니다. 스톱워치처럼 작동합니다. 특정 간격으로 이벤트를 발생 시키려면 다양한 Timer 클래스를 살펴보아야합니다.

즉, 가젯에서 타이머를 공유하는 것이 좋습니다. 모든 것을 더 잘 수행 할 수 있으며 작성한 단일 스케줄러에서 사용하는 타이머 수가 적고 스케줄러가 가젯을 관리하는 경우 작성하고 이해하는 것이 더 간단 할 것입니다.

7

스톱워치는 Windows API 호출 QueryPerformanceCounter()의 결과를 보유하는 변수 일 뿐이며 "실행 중"은 오버 헤드가 없습니다. 중지하면 QueryPerformanceCounter()이 다시 호출되므로 성능이 좋아야합니다. 즉, Reed Copsey에 동의합니다. 디자인을 재고해야합니다. 이렇게 많은 수의 장치로 인해 장치 드라이버에 대해 생각하기 시작했습니다.

0

많은 타이머를 처리 할 수 ​​있다면 문제가 될 것이라고 생각합니다. 수천 개의 타이머를 읽고 기능을 수행하지 않고 많은 시간을 낭비하게됩니다.

나는 Stopwatch 클래스의 구현을 알지 못하지만 시작과 정지시 타이머의 값을 다시 읽었다 고 상상할 수 있습니다. 따라서 스톱워치 인스턴스는 리소스가 전혀 필요하지 않을 수 있습니다.

하지만 그냥 사용해보십시오. 루프에서 몇 가지 thousend 인스턴스의 배열을 생성하고 시작하고 어떤 일이 일어나는지 살펴 봅니다.

0

가제트 응답을 포함하는 전역 대기열과 대기열을 쿼리하고 필요할 경우 메시지를 다시 보내는 하나 또는 몇 개의 스레드를 생각해보십시오. 더 잘 수행 할 것입니다.

0

지정된 간격으로 이벤트를 예약하는 데 한 시간 원본 사용

0

스톱워치 클래스는 매우 간단합니다. 항상 "달리는"것이 아닙니다. 시작하라는 말을하면 시스템 시간을보고 일시 중지, 중지, 재설정 등을 지시하면이 작업을 할 때마다 시스템 시간 만 보입니다. ElapsedMilliseconds를 묻는 것은 (Processor.CurrentTicks - StartTicks)/TicksPerMillisecond를 말하는 것과 같습니다. 정말 간단합니다. 시스템은 매우 많은 수를 처리 할 수 ​​있습니다.

이 질문이 문제에 대한 올바른 디자인인지 여부는 언급하지 않았습니다. 시스템은 문제없이 수천 개의 스톱워치를 처리 할 수 ​​있습니다.