반응형
- .NET 리소스 관리에 대한 이해
- 힙에 관한 메모리 관리는 가비지 콜렉터가 완전히 책임 진다.
- 이외에 비관리 리소스는 개발자가 관리해야함
-
더보기비관리 리소스
- finalizer와 IDisposable 인터페이스 라는 2개의 메커니즘을 제공
=> finalizer는 객체를 가비지로 판단한 경우 이 객체를 다른 큐에 삽입하여 나중에 finalizer를 호출할 준비만 수행함
-
- 가비지콜렉터의 세대 개념
- 0세대 : 수집 절차 이후 생서된 객체들
- 1새대 : 두번이상 수집절차에서 살아남은객체들
- 수집 절차 ?
- 기본적으로 0세대 객체만 검사
- 1세대는 대력 10번에 한번 검사
- 2세대는 대력 100번에 한번 검사
- 비관리 리소스를해제하는 좋은 방법은 IDisposable을 사용하는 것이다.
- [Item12] 할당 구문보다 멤버 초기화 구문이 좋다.
- 멤버 초기화 ex : private List<string> Labels = new List<string>();
- 멤버 초기화구문을 사용하지 않는것이 좋은상황
- 객체를 0이나 null로 초기화 하는경우
- 기본 시스템 초기화 루틴은 코드를 실행하기 전 모든 값을 0으로 설정한다.
-
더보기ex) public struct MyTyp{...}
MyType myVal1; //0으로 초기화
MyType myVal2 = new MyType(); //반복해서 0으로 초기화. 약간의 추가 시간이 소요됨.
-
- 동일한 객체를 반복해서 초기화 하는경우
-
더보기ex) private List<string> Labels = new List<string>();
생성자(int size)
{
Labels = new List<string>(size);
}
//int 변수 하나르 매개변수로 가진생성자가 호출될때 이전 Lables는 즉각 가비지가 된다.
-
- 멤버 초기화 할때 예외처리가 필요한 경우
- 멤버 초기화는 try로 감쌀 수 없기 때문에 초기화 과정에서 예외가 발생하면 외부로 전파된다. 이경우 생성자 내로 초기화 구문을옮기고 예외처리를 해야한다.
- 기본 시스템 초기화 루틴은 코드를 실행하기 전 모든 값을 0으로 설정한다.
- 객체를 0이나 null로 초기화 하는경우
- [Itme13] 정적 클래스 멤버를올바르게 초기화 하라
- 정적 멤버가 있다면 인스턴스를 생성하기 전에 반드시 정적 멤버 변수를 초기화 해줘야 함
- 정적 생성자 or 정적 멤버 초기화 구문 사용
- 정적 생성자는 타입내에 정의된 모든 메소드, 변수, 속성에 최초로 접근하기 전에 호출된다.
- 1.정적 초기화 구문
- 정적 멤버를 간당하게 초기화 하는 경우라면 정적 생성자보단 정적 초기화 구문으 사용하는것이 간편하다.
-
더보기private static readonly Mysingleton theOneAndonly = new MySingleton();
public static MySingleton TheOnly
{
get { return theOneAndOnly;}
}
private MySingleton(){}
//TheOnly를 호출하여 사용
- 2. 정적 생성자
-
더보기private static readonly MySingleton theOnly;
static MySingleton()
{
theOnly = new TheOnly();
}
public static Mysingleton TheOnly
{
get { return theOnly;}
}
private Mysingleton(){}
-
- 정적 멤버가 있다면 인스턴스를 생성하기 전에 반드시 정적 멤버 변수를 초기화 해줘야 함
참조 - Effective C# <강력한 C# 코드를 구현하는 50가지 전략과 기법, 이펙티브>, 빌 와그너, 김명신, 한빛미디어
반응형
'C# > Effective C#' 카테고리의 다른 글
[Effective C#] Item16 생성자 내에서는 절대로 가상함수를 호출하지 마라. (0) | 2022.08.30 |
---|---|
[Effective C#] Item15 불필요한 객체를 만들지 마라 (0) | 2022.07.13 |
[Effective C#] Item14 초기화 코드가 중복되는것을최소화 하라. (0) | 2022.07.08 |
[Effective C#] Item6 ~ Item 10 (0) | 2022.07.08 |
[Effective C#] Item1 ~ Item5 (0) | 2022.07.08 |