본문 바로가기

BenchmarkDotNet

C# Stopwatch와 PerformanceCounter 비교 분석 코드 성능을 측정할 때 무엇을 써야 할지 고민되기 쉽습니다. Stopwatch는 코드 블록의 경과 시간 측정에 최적화되어 있고, PerformanceCounter는 Windows 시스템/프로세스 수준 지표 관찰에 좋습니다. 이 글에서는 두 도구의 핵심 차이, 정확도/오버헤드, 올바른 사용 시나리오와 예제를 간략히 정리합니다.1. 핵심 요약Stopwatch: 경과 시간(벽시계 시간) 측정에 특화된 경량 타이머입니다. 고해상도 타이머(QueryPerformanceCounter 등)를 사용하며, 마이크로벤치마크와 코드 경로 비교에 적합합니다.PerformanceCounter: Windows 퍼포먼스 카운터를 읽어 시스템/프로세스 지표(CPU, 메모리 등)를 샘플링합니다. 코드 블록 하나의 소요 시간을 재기보다.. 더보기
C# 값 튜플(ValueTuple) vs Tuple 성능 비교 ValueTuple은 구조체, Tuple은 클래스입니다. 이 한 줄이 성능 차이의 대부분을 설명합니다. 구조체인 ValueTuple은 스택 또는 포함하는 객체 내부에 저장되어 할당과 GC 비용이 적고, 클래스인 Tuple은 힙 할당과 GC 압력이 발생합니다. 실용적인 관점에서 둘의 속도, 메모리 차이를 간단한 코드와 함께 정리합니다.1. 핵심 차이 요약- ValueTuple: 구조체(struct), 필드가 공개이며(mutability) 이름 지정과 분해 할당 지원, 일반적으로 할당 없음(escape 시 제외), 빠름.- Tuple: 참조형(class), 불변(immutable), 항상 힙 할당, GC 대상, Item1/Item2 등만 제공, 느림.- 성능 포인트: 작은 데이터(예: 2~3개 값) 왕복 시.. 더보기
C# BenchmarkDotNet으로 성능 측정하기 BenchmarkDotNet은 C#에서 코드 성능을 정확하게 측정할 수 있는 강력한 라이브러리입니다. 이번 글에서는 BenchmarkDotNet을 설치하고 기본적인 벤치마크를 작성하는 방법을 알아봅니다.1. BenchmarkDotNet 설치하기먼저 프로젝트에 BenchmarkDotNet NuGet 패키지를 추가합니다.dotnet add package BenchmarkDotNet2. 기본 벤치마크 작성성능을 측정할 메서드를 포함한 클래스를 만들고, 클래스와 측정 메서드에 특성을 붙입니다.using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Running;public class StringConcatBenchmark{ private string str1 = .. 더보기