04
25
다음 본문은 도서 이펙티브 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

 

결론

 - 자주 사용되는 지역변수는 멤버변수나 정적 객체로 변경하라.

 

 

COMMENT