티스토리 뷰

C#

C# Foreach에서 발생하는 가비지?

아카베리 ACABerry 2018. 10. 28. 18:15

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를 사용해도 내부적으로 가비지를 전혀 만들질 않는다!!!

(중급) 유니티의 Foreach는 여전히 악의 근원일까요 by.마카트(dlwh****)

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
C# Foreach에서 발생하는 가비지?  (0) 2018.10.28
가비지컬렉터  (0) 2018.08.20
E-Mail 유효성검사  (0) 2017.06.14
Virtual - override 심플예제코드  (0) 2017.01.11
나눗셈보다 곱셈 연산속도에 대한 자료  (0) 2017.01.11
댓글
댓글쓰기 폼
공지사항
Total
5,705
Today
0
Yesterday
3
TAG
more
«   2021/12   »
      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 31  
글 보관함