2011-12-06 6 views
4

스레드에 크게 의존하는 프로그램을 작성했습니다. 또한 각 스레드가 수행하는 총 시간과 실행 시간 (커널 시간에 사용자 시간을 더한 시간)을 측정해야한다는 요구 사항이 있습니다.스레드 실행 타이밍

임의의 수의 스레드가있을 수 있으며 한 번에 많은 스레드가 실행될 수 있습니다. 이것은 사용자 활동에 달려 있습니다. 가능한 한 빨리 실행해야하므로 스레드 시간을 측정하기 위해 WMI/Performance Monitor와 같은 오버 헤드가있는 것을 사용하는 것이 이상적이지 않습니다. http://www.codeproject.com/KB/dotnet/ExecutionStopwatch.aspx

내 질문은 간단하다 :이 문서에서와 같이 순간

, 내가 GetThreadTimes을 사용하고 난 (.NET 스레드 시스템 스레드와 일대일로 일치하지 않을 수 있습니다 이해 지금까지의 모든 테스트에서 일대일로 진행된 것 같습니다.) 그렇다면 .NET에서 두 개 이상의 스레드를 하나의 시스템 스레드에 넣기로 결정하면 내 타이밍 코드에서 이상한 결과가 나타날 수 있습니까? 그렇다면 (또는 그렇지 않더라도) .NET 스레드의 커널 및 사용자 시간을 측정 할 수있는 또 다른 방법이 있습니까?

+3

개인적으로 [SmartThreadPool] (http://www.codeproject.com/KB/threads/smartthreadpool.aspx)과 같은 스레드 풀을 찾아 성능 측정에 사용합니다. –

+0

나는 당신의 질문을 이해하기가 힘들뿐만 아니라 당신이 실제로 측정하고자하는 것과 그 이유를 알고 있습니다. 간단한 타이밍이나 ANTS 또는 Jetbrain과 같은 일반 CPU 프로파일 러에 대해 스톱워치 유형 + 로깅을 고려해 보셨습니까? – Mahol25

답변

1

명시된대로 : 다중 스레드는 스레드 스케줄러에서 내부적으로 관리하며 CLR은 일반적으로 운영 체제에 위임합니다. 스레드 스케줄러는 모든 활성 스레드에 적절한 실행 시간이 할당되고 대기 중이거나 차단 된 스레드 (예 : 단독 잠금 또는 사용자 입력)가 CPU 시간을 소비하지 않도록합니다. 이론적으로 NET 팀이 자신의 스케줄러를 구현할 수는 있지만 의심 스럽습니다. 그래서 GetThreadTimes 함수가 필요하다고 생각합니다.