포스트를 만든 목적
- 이렇게 해야, 내가 책을 건성으로 보지 않는다.
개요
- boxing, unboxing 이 언제 발생 되고, 어떻게 처리 되는지 알아야 한다.
내용
관련 링크
- http://msdn.microsoft.com/ko-kr/library/yz2be5wk.aspx // boxing과 unboxing
- http://msdn.microsoft.com/ko-kr/library/ms173196.aspx // C# 성능
boxing 과 unboxing이란 무엇인가?
C#에선 value 타입과 reference 타입이 존재한다. 이러한 두 타입간의 존재 때문에, reference 타입만을 요구하는 특정한 상황에선, 어쩔 수 없이, 변환 하는 과정이 필요하다. value 타입이 reference 타입으로 변환할 때, 레퍼런스 객체에 포장한다 하여, boxing 이라고 하고, 이 포장된 것을 사용 하려 할 때, 포장했던 박스를 푼다고 해서, unboxing 이라고 한다.
왜 bxoing과 unboxing을 최소화 해야 하는가?
value 타입을 boxing 하면, reference 타입으로 바뀐다. 이 때, 임의의 reference 타입 속에 value 타입이 복사가 된다. 즉, 힙에 올라간다는 뜻이다. 반대로 unboxing 을 하게 되면, box 안에 있는 value를 임의의 value에 복사하게 된다.
boxing은 간단한 참조 할당보다 최대 20배의 시간이 걸리며, unboxing은 캐스팅 과정에서 할당과정보다 4배의 시간이 소모가 된다. 그래서 최소화 하라는 것이다. boxing은 묵시적으로 이루어지기 때문에, 주의해야 한다.
관련 코드를 줄 수 있는가?
boxing 과 unboxing을 최소화 하는 요령
- value 타입이 reference 처럼 많이 쓰인다면, 차리리 reference 타입으로 바꾸어 버린다.
- 함수의 인자가 object 타입인 경우, boxing 해도 무리 없는지 생각해 본다.
결론
- 성능에 치명적인 영향을 준다면, boxing과 unboixng 을 최소화 해라.
여담
- 졸렵다.
'책 정리 > Effective C#' 카테고리의 다른 글
item 22, 이벤트를 이용하여 외부로 노출할 인터페이스를 정의하라. (0) | 2010.07.10 |
---|---|
item 21, delegate를 이용하여 콜백을 표현하라. (1) | 2010.07.10 |
item 20, interface의 구현과 virtual 메서드의 overriding을 구분하라. (0) | 2010.07.10 |
item 19, 상속보다는 interface를 정의하고 구현하는 것이 좋다. (1) | 2010.07.07 |
item 18, 표준 Dispose 패턴을 구현하라. (2) | 2010.07.06 |
item 16, Garbage를 최소화 하라. (0) | 2010.07.03 |
item 15, 자원해제를 위해서 using과 try/finally를 이용해라 (0) | 2010.07.03 |
item 14, 연쇄적인 생성자 호출을 이용하라. (4) | 2010.07.02 |
item 13, static 클래스 멤버는 static 생성자를 사용하여 초기화 하라. (0) | 2010.07.01 |
item 12, 할당문보다는 변수 초기화를 사용하는 편이 더 좋다 (0) | 2010.06.30 |
최근댓글