일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 리덕스
- javascript
- React Redux
- 리액트 타입스크립트 적용하기
- docker container
- asp core mvc
- Asp Net Core
- Git
- asp.net core
- C#
- 도커 레이어
- Docker
- 도커 컨테이너
- Docker image
- js
- react typescript
- 리액트
- redux
- docker layer
- asp core 권한
- c# delegate
- vscode extension
- 도커 이미지
- react ts
- asp.net core mvc
- 리액트 타입스크립트
- 리액트 리덕스
- react
- ASP Core
- 도커
- Today
- Total
기초 메모지
C# - 컬렉션 / 박싱(Boxing), 언박싱(UnBoxing) 본문
박싱(Boxing)
값(Value) 타입을 참조(Reference) 타입으로 변환하는 작업을 의미합니다.
스택(Stack)에 할당된 iNum을 힙(Heap)에 복사하고 oNum에 힙에 복사된 iNum 주소 값을 할당합니다
언박싱(UnBoxing)
참조(Reference) 타입을 값(Value) 타입으로 변환하는 작업을 의미합니다.
힙(Heap)에 할당된 iNum을 스택(Stack)에 할당되어있는 rNum으로 복사합니다.
박싱(Boxing) 과 언박싱(UnBoxing) 현상이 일어나면 왜 성능이 떨어질까?
할당하거나 이용할때 스택(Stack)과 힙(Heap) 사이에 복사가 이뤄지면서 값(Value) 타입을 그대로 사용할때보다 지연이 발생하여 성능이 낮아집니다.
컬렉션(Collection)과 박싱(Boxing), 언박싱(UnBoxing)은 어떤 관계일까?
대표적인 컬렉션(Collection)인 ArrayList를 살펴보면 리스트를 추가할때 ArrayList.Add(object) 즉, 참조 타입인 Object로 받고 있습니다.
ArrayList.Add(Object) 메서드 (System.Collections) | Microsoft Docs
ArrayList.Add(Object) 메서드 (System.Collections)
개체를 ArrayList의 끝 부분에 추가합니다.
docs.microsoft.com
그림을 참고하면 ArrayList 배열은 각 힙(Heap)에 할당되어있는 값 주소를 참조하고 있습니다.
다시 말하면 배열 길이 만큼 박싱(Boxing)과 언박싱(UnBoxing)이 일어나므로 성능이 크게 하락하게 됩니다.
그런 이유로 박싱(Boxing)과 언박싱(UnBoxing)이 일어나는 콜렉션(Collection) 대신
값 타입인 제네릭 컬렉션(Generic Collection)을 사용해야합니다.
'Languages > C#' 카테고리의 다른 글
C# - 상대 경로(Reletive Path) (0) | 2022.08.18 |
---|---|
C# - 디렉토리(Directory) (0) | 2022.08.18 |
C# - 열거형(Enum) (0) | 2022.07.14 |
C# - 조건문(Conditional Statements) / switch (0) | 2022.07.13 |
C# - 조건문(Conditional Statements) / if (0) | 2022.07.13 |