티스토리 뷰
반응형
ACABERRY와 함께하는 프로그래밍 공부
C# Foreach에서 발생하는 가비지?
( foreach의 성능(속도)과는 관계없이 GC관련. )
- foreach 를 사용하면 enumerator 를 위해 32B 메모리를 할당합니다. 커보이지는 않지만, Update 와 FixedUpdate 안에 몇개 넣어두고 돌려본다면 실감 날겁니다.
- delegate 에 콜백을 추가하거나 삭제하는 것은 104B 메모리를 할당합니다. 우회하는 방법은 모르겠습니다.
[★★★★★] 2D 게임 최적화 필수팁! | | | ♥ 아카베리 유니팁 |
이 부분에서 foreach는 enumerator에서 32B의 메모리를 사용한다고 하였는데, 내부적인 동작은 아래와 같아요.
using (var enumerator in list.GetEnumerator())
{
while (enumerator.MoveNext())
{
int current = enumerator.Current;
}
}
}
Enumerator enumerator = list.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
int current = enumerator.Current;
}
}
finally
{
var disposable = (System.IDisposable)enumerator;
disposable.Dispose();
}
var disposable = (System.IDisposable)enumerator; <- 이 부분에서 Boxing을 하고 있었던 것입니다!!!!
그러한데..
라고 생각했었는데, 유니티 5.5버전에서 엄청난 변화가 발생합니다.
- Scripting: Upgraded C# compiler to Mono 4.4. The new compiler still targets C# 4 and .NET 3.5, but provides better performance and many bug fixes.
C# 컴파일러가 최신 버전의 Mono 컴파일러로 업그레이드 된 것입니다!!!!
3. 최신 C# 컴파일러에선 foreach를 사용해도 내부적으로 가비지를 전혀 만들질 않는다!!!
https://cafe.naver.com/indiedev/13188
―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ――――
▶대부분 퍼온 내용이기에 출처를 꼭 명시합니다.
▶문제되는 부분이 있다면 요청주시면 언제든 수정 & 삭제합니다.
▶포스팅의 목적은 공부하시는 분들이 쉽게 접하고 정답을 찾아가는데 도움을 드리고자 함입니다.
―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ――――
반응형
'C#' 카테고리의 다른 글
=> 연산자 , 식 본문 정의 (0) | 2021.07.05 |
---|---|
가비지컬렉터 (0) | 2018.08.20 |
E-Mail 유효성검사 (0) | 2017.06.14 |
Virtual - override 심플예제코드 (0) | 2017.01.11 |
나눗셈보다 곱셈 연산속도에 대한 자료 (0) | 2017.01.11 |
댓글