<객체 생성 최적화>
- 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();
- 풀에서 재사용하여 객체 생성 비용 줄임
'c#' 카테고리의 다른 글
MacAddress 구할 때 첫번째 인덱스가 공백인 버그 (0) | 2025.04.10 |
---|---|
프로젝트 파일을 열 수 없습니다. .NET SDK의 8.0.200 버전에는 최소 17.8.3 버전의 MSBuild가 필요합니다. 현재 사용할 수 있는 MSBuild의 버전은 16.11.2.50704입니다. global.json에 지정된 .NET SDK를 현재 사용할 수 있는 MSBuild 버전을 필요로 하는 이전 버전으로 변경하세요. (0) | 2025.02.19 |
조건없는 값 반환 예외 처리 Linq (0) | 2025.02.17 |
Regex.Unescape() 특수문자 스트링 변경 (0) | 2025.02.12 |
String 스트링 Byte 변환 (0) | 2025.01.20 |