개요
- 예전에 for가 foreach 보다 성능이 좋다는 글을 종종 본 적 있음
- .NET6에서 확인
코드
Program.cs
using Study;
Loop.StartFor(1000000);
----------------------------------
using Study;
Loop.StartForeach(1000000);
Loop.cs
namespace Study
{
class Loop
{
public static void StartFor(int count)
{
var recorder = new Recorder();
var temp = 0;
var list = new List<int>();
for (var i = 0; i < count; i++)
{
list.Add(i);
}
recorder.Start();
for (var i = 0; i < count; i++)
{
temp += list[i];
}
recorder.Stop();
}
public static void StartForeach(int count)
{
var recorder = new Recorder();
var temp = 0;
var list = new List<int>();
for (var i = 0; i < count; i++)
{
list.Add(i);
}
recorder.Start();
foreach (var val in list)
{
temp += val;
}
recorder.Stop();
}
}
}
Recorder.cs
namespace Study
{
class Recorder
{
Stopwatch _timer = new Stopwatch();
long _bytesPhysicalBefore = 0;
public void Start()
{
_timer.Reset();
var process = Process.GetCurrentProcess();
_bytesPhysicalBefore = process.WorkingSet64;
_timer.Start();
}
public void Stop()
{
_timer.Stop();
var process = Process.GetCurrentProcess();
var bytesPhysicalAfter = process.WorkingSet64;
Console.WriteLine($"{bytesPhysicalAfter - _bytesPhysicalBefore} physical bytes used.");
Console.WriteLine($"{_timer.ElapsedTicks} total ticks ellapsed.");
Console.WriteLine("--------------------------------------");
}
}
}
출력
// For 5회
49152 physical bytes used.
45298 total ticks ellapsed.
--------------------------------------
77824 physical bytes used.
44192 total ticks ellapsed.
--------------------------------------
49152 physical bytes used.
44367 total ticks ellapsed.
--------------------------------------
77824 physical bytes used.
45675 total ticks ellapsed.
--------------------------------------
77824 physical bytes used.
44521 total ticks ellapsed.
--------------------------------------
// Foreach 5회
45056 physical bytes used.
49288 total ticks ellapsed.
--------------------------------------
45056 physical bytes used.
47550 total ticks ellapsed.
--------------------------------------
40960 physical bytes used.
46511 total ticks ellapsed.
--------------------------------------
45056 physical bytes used.
42879 total ticks ellapsed.
--------------------------------------
73728 physical bytes used.
42931 total ticks ellapsed.
--------------------------------------
결론
- 메모리 사용량 및 시간 성능은 차이가 없는 것으로 보임
참고 문헌
- ttps://helloezzi.tistory.com/131