본문 바로가기

워크/C# 5.0

성능 최적화

성능 최적화는 소프트웨어에서 매우 중요한 주제입니다. C#에서의 성능 최적화는 여러 전략과 기술에 의존할 수 있습니다. 여기서는 몇 가지 일반적인 성능 최적화 전략에 대한 예시를 제공하겠습니다:

 

불필요한 연산 최소화:

// Before optimization
List<int> numbers = Enumerable.Range(0, 10000).ToList();
int sum = 0;
for (int i = 0; i < numbers.Count(); i++)  // Using Count() in loop condition is inefficient.
{
    sum += numbers[i];
}

// After optimization
int length = numbers.Count;  // Cache the count.
for (int i = 0; i < length; i++)
{
    sum += numbers[i];
}

StringBuilder 사용:

문자열을 여러 번 연결할 때 StringBuilder를 사용하여 메모리 할당과 문자열 복사 횟수를 줄입니다.

// Before optimization
string result = "";
for (int i = 0; i < 1000; i++)
{
    result += i.ToString();
}

// After optimization
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
    builder.Append(i);
}
string optimizedResult = builder.ToString();

Lazy Initialization:

데이터가 실제로 필요할 때까지 객체의 초기화를 지연시킵니다.

private ExpensiveObject _expensive;

public ExpensiveObject ExpensiveInstance
{
    get
    {
        if (_expensive == null)
        {
            _expensive = new ExpensiveObject();
        }
        return _expensive;
    }
}

배열 대신 List 사용:

크기가 동적으로 변경되는 데이터에 대해 배열 대신 List<T> 사용하여 메모리 재할당 횟수를 줄입니다

// Before optimization
int[] array = new int[10];
// ... add, remove operations requiring frequent resizing ...

// After optimization
List<int> list = new List<int>();
// ... add, remove operations with better performance ...

LINQ 쿼리 최적화:

필요한 연산만 수행하도록 LINQ 쿼리를 조정합니다

var items = new List<Item>();
// ... fill the list ...

// Before optimization
var expensiveFilteredItems = items.Where(i => i.IsExpensive()).ToList().Take(10);

// After optimization
var optimizedFilteredItems = items.Where(i => i.IsExpensive()).Take(10).ToList();

성능 최적화는 종종 프로파일링 도구를 사용하여 애플리케이션의 성능 병목을 식별하고, 해당 부분을 개선하는 과정을 포함합니다. 항상 실제 문제 영역에 집중하고, 무작정 최적화하기보다는 실제로 성능 향상이 필요한 부분만 최적화하는 것이 좋습니다.

 

 

'워크 > C# 5.0' 카테고리의 다른 글

활용 사례: 비동기 패턴 응용  (0) 2023.09.03
새로운 라이브러리와 API  (0) 2023.09.02
dynamic 키워드의 향상  (0) 2023.08.31
속성 강화  (0) 2023.08.31
Windows Runtime (WinRT) 지원  (0) 2023.08.30