728x90
업무를 하다가 문득 이런 생각이 들었다.
'다음과 같은 반복문 안에서 _condition은 항상 true 또는 false인데
매번 for문 안에서 체크하는 것이 비효율적인 것 같다.'
for (var i = 0; i < repeat; i++)
{
value = _condition ? i * 2 : i;
// ...
}
그렇다면 Func Delegate를 이용하는 방법은 어떨까?
반복문 밖에서 한번 선언해 두게 되면 매번 체크하지 않으니 성능이 좋지 않을까?
근데 delegate invoke로 인한 오버헤드가 있지 않을까?
Func<int, int> getValue = _condition ? input => input * 2 : input => input;
for (var i = 0; i < repeat; i++)
{
value = getValue(i);
// ...
}
그래서 성능을 직접 측정해 보기로 했다.
그래서 결과는?
삼항 연산자를 사용하는 것이 좀 더 빨랐다.
실제로 회사에서 더 복잡한 코드로 테스트했을 때도 삼항 연산자가 더 빨랐었다.
- 테스트 코드
var repeat = 10_000_000;
var _condition = true;
int value;
var stopwatch = new Stopwatch();
stopwatch.Start();
for (var i = 0; i < repeat; i++)
{
value = _condition ? i * 2 : i;
}
stopwatch.Stop();
Debug.WriteLine($"Ternary: {stopwatch.ElapsedMilliseconds} ms");
stopwatch.Restart();
Func<int, int> getValue = _condition ? input => input * 2 : input => input;
for (var i = 0; i < repeat; i++)
{
value = getValue(i);
}
stopwatch.Stop();
Debug.WriteLine($"Func: {stopwatch.ElapsedMilliseconds} ms");
728x90
'Programming > C#' 카테고리의 다른 글
[C#] 어떤 프로그램이 설치되어 있는지 확인하기(windows 11) (0) | 2024.08.10 |
---|---|
C# Coding Style (0) | 2024.07.05 |
[C#] Linq SingleOrDefault() vs FirstOrDefault() (0) | 2024.02.17 |
[C#] BsonDocument를 JSON으로 변환하기 (0) | 2024.02.09 |
[C#] Closure 문제 (0) | 2022.10.21 |
댓글