다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
아무리 C#에서 자동으로 가비지 컬렉터가 불필요한 메모리를 관리해준다지만,
가비지 수집기가 과도하게 동작할경우 심각한 성능 문제를 야기할 수 있다.
using 문
- 잠시 사용되고 버려지는 특정 객체를 사용하는 구간을 명시해준다.
using(MyClass t = new MyClass())
{
t.MyMethod();
}
자주 사용될 지역 변수는 멤버로 선언하자
- 참조타입 객체를 매번 생성하는 경우라면 멤버 변수로 변경하면 가비지를 줄일 수 있다.
클래스 자체가 많다면 정적 멤버로 선언하자
- 멤버변수로 선언한다면 각 클래스마다 똑같은 객체가 클래스마다 생성될 것이다.
- 이를 정적 멤버로 선언해두면 같은 타입 클래스끼리는 공용으로 사용할 수 있다.
- 내부적으로 지연 평가(lazy evaluation)을 사용하면 필요할 때 객체를 생성할 수 있다.
private static Brush _black;
public static Brush Black
{
get
{
if(_black == null)
_black = new SolidBrush(Color.Black);
return _black;
}
}
변경 불가능한 타입
- string객체는 생성되면 문자열의 내용을 수정할 수 없다.
- 문자열을 바꾸는게 아니라 매번 새로운 객체를 생성하고있는것.
string name = "A"; // A
name += "B"; // AB
name += "C"; // ABC
- 문자열 보간을 사용하면 한번에 생성됨.
string name = string.Format("{0}{1}{2}", "A","B",C"); // ABC
- stringBuilder 클래스
StringBuilder builder = new StringBuilder("A");
builder.Append("B");
builder.Append("C"); // ABC
결론
- 자주 사용되는 지역변수는 멤버변수나 정적 객체로 변경하라.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[17] 표준 Dispose 패턴을 구현하라 (0) | 2021.04.26 |
---|---|
[16] 생성자 내에서는 절대로 가상 함수를 호출하지 말라 (0) | 2021.04.26 |
[14] 초기화 코드가 중복되는 것을 최소화하라 (0) | 2021.04.25 |
[13] 정적 클래스 멤버를 올바르게 초기화하라 (0) | 2021.04.25 |
[12] 할당 구문보다 멤버 초기화 구문이 좋다 (0) | 2021.04.25 |