2010-07-03 5 views
0

각 스레드를 실행하는 데 걸리는 시간을 계산해야합니다. 그래서이 코드를 사용했습니다. 스레딩에 대한 몇 가지 개념적 문제

void work(){ 
    Stopwatch stopWatch = new Stopwatch(); 
    stopWatch.Start(); 

    //codes,,, 

    stopWatch.Stop(); 

    TimeSpan ts = stopWatch.Elapsed; 
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,ts.Milliseconds); 
    Console.WriteLine(elapsedTime, "RunTime"); 
} 

그래서 지금은 내 질문에 내가 1000 개 스톱워치 물체 나 때문이 아니라 배열을 생성해야 할 것입니다 :
Stopwatch stopWatch = new Stopwatch(); 
stopWatch.Start(); 

stopWatch.Stop(); 
TimeSpan ts = stopWatch.Elapsed; 

string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,ts.Milliseconds); 
Console.WriteLine(elapsedTime, "RunTime"); 

지금 내 각 스레드이 어떻게되는지입니다() 메서드 작업을 실행 1000 개의 work() 메소드가 동시에 실행되고 있다고 가정 해 보겠습니다.

답변

2

스레드 당 새로운 StopWatch 개체를 만들 때마다 각 호출이 다른 스레드에서 수행된다고 가정하면 코드가 정상적으로 작동합니다.

즉, 각 StopWatch은 공유 리소스가 아니므로 다른 스레드가 다른 스레드 StopWatch 개체와 간섭하지 않아야합니다.

+0

괜찮습니다 .. 고마워요 – phen

1

각 work() 메소드가 자체 스레드에서 생성되면 yes입니다.

매우 큰 서버 팜이있는 경우를 제외하고는 1000 개의 스레드를 인스턴스화하면 안됩니다.

+1

어떻게 서버 팜이 도움이됩니까? 스레드는 여전히 프로세스에 로컬 것입니다 ... –

+0

괜찮아 .. 많이 고마워 – phen

0

stopWatch 변수는 work 방법 내에서 로컬 변수입니다. 즉, work이 호출 될 때마다 독립적 인 변수를 가질 것입니다. work(0120) 내에서 동일한 스레드에서work을 호출하고 독립적 인 StopWatch 인스턴스 및 stopWatch 변수를 얻을 수도 있습니다.

+0

.. 고마워. – phen

1

StopWatch는 "벽 시간"즉 StartStop 사이의 "실제 시간"으로 전달되는 시간을 측정합니다. 동시에 여러 스레드가 실행 중일 때 스레드는 실행되지 않았지만 CPU 코어가 사용 가능할 때까지 기다려야하는 시간을 포함합니다.

GetThreadTimes은 스레드에서 소비 된 시간을 측정 할 수 있지만 완벽하지는 않습니다. 매우 미세한 입도 (10..15ms)로 인해 작은 성능 측정에 부적합하고 잘못된 결과를 나타냅니다. 자발적으로 양자를 일찍 포기하는 실.

관련 문제