C#에서의 최적화 팁

c# 2025. 2. 21. 10:45
728x90

<객체 생성 최적화>

- Garbage Collector 부담 감소
new List<int> 매번 생성 대신 list.Clear()로 재사용 하기


<LINQ 최적화>
- 메모리 절약

var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();

ToList()를 사용하면 모든 데이터를 리스트로 저장하므로 메모리 사용량이 증가

var evenNumbers = numbers.Where(n => n % 2 == 0);

- IEnumerable로 유지하면 필요한 시점에서만 데이터를 가져오므로 메모리 절약

<반복문 최적화>
- 성능 향상
-foreach 대신 for문 쓰기(더빠름)

 

<문자열 최적화>
-문자열연결은 새로운 문자열 객체가 계속 생성되므로 비효율적 (+연산자 사용하는 것)
-StringBuilder 사용(내부 버퍼 사용, 효율적 연결)


<상수 최적화>
- 불필요한 메모리 할당 방지
- 상수를 일반 변수 사용하는 대신 readonly와 const 사용


<값 타입 최적화>
- 작은 크기의 데이터는 class 대신 struct를 쓰는 게 성능에 유리함
- 값 타임(struct)는 힙이 아니라 스택에 저장되어 메모리 관리가 더 효율적임

<비동기 최적화>

public void LoadData()
{
    Thread.Sleep(3000); // 3초 동안 블로킹 (UI 멈춤)
}

- 메인 스레드를 블로킹 하면 UI 가 멈춰서 사용자 경험이 나빠짐

public async Task LoadDataAsync()
{
    await Task.Run(() => Thread.Sleep(3000)); // 백그라운드 스레드에서 실행
}

- 비동기 코드 사용시 UI 스레드를 블로킹 하지 않으면서 데이터를 로드 가능

 

<빠른 검색>
-Dictionary 활용
- 리스트에서 찾을 때 데이터가 많을 수록 느려짐 (O(N))
- 해시 테이블 기반 Dictionary는 검색 속도가 O(1) 이라 훨씬 빠름



<메모리 최적화>
- 오브젝트 풀링
- 새 객체를 계속 생성하면 GC의 부담이 커짐
Ball ball = ObjectPool.GetBall();
- 풀에서 재사용하여 객체 생성 비용 줄임

728x90
Posted by 바르마스
,