외부 루프 코드가 없으므로 여기 어둠 속에서 찌르다.
var iterations = 100;
var stopwatch = new Stopwatch();
// Run Serial version
stopwatch.Start();
for(int i = 0; i < iterations; i++)
{
for (int i = 0; i < 4; i++)
{
Console.WriteLine(tmp);
}
}
stopwatch.Stop();
var serialTime = stopwatch.ElapsedMilliseconds;
stopwatch.Reset();
// Run parallel version
stopwatch.Start();
for(int i = 0; i < iterations; i++)
{
Parallel.For(0,4, (i) => Console.WriteLine(i));
}
stopwatch.Stop();
var parallelTime = stopwatch.ElapsedMilliseconds;
Console.WriteLine("Serial took : {0}ms", serialTime/(double)iterations);
Console.WriteLine("Parallel took: {0}ms", parallelTime/(double)iterations);
이가 있기 때문에 속도 향상을 측정하기위한 좋은 테스트하지 않을 수 있습니다 : 당신은 단지 전체 평균 실행 시간을 측정하는 경우는 직렬 및 병렬 버전을 측정하기 위해이 같은 것을 사용할 수, 작업을 저장 할 필요가 없습니다 작업량이 매우 가볍습니다. 보다 많은 오버 헤드를 가진 함수를 호출하거나 더 많은 작업을 모방하려고 Thread.Sleep
과 같은 함수를 호출 해 볼 수 있습니다. 또한 Amhahl의 Law speed up을 C#으로 측정하는 방법에 대한 내 대답 This StackOverflow Question을 참조하십시오.
그'tasks' 배열로 무엇을하려합니까? 이 작업은 실제 작업 세트입니까, 콘솔에 4 번 쓰는 것입니까? 단 4 번의 반복으로, 새로운 스레드를 시작하는 오버 헤드가 병렬 작업에서 얻는 이득보다 더 많이 겪게 될 것입니다. –
참고로, Parallel.For에는 많은 오버 헤드가 있습니다. 실제로 측정하지 않고 속도가 빠르거나 스로틀 링이 필요하다면 Task.Run을 사용하여 루프를 풀고 작업을 시작하는 것이 좋습니다. 너,하고있어, –