unity의 메모리 최적화 관련 글을 보면 foreach를 사용하지 마라는 것을 자주 볼 수 있다.
이유는 foreach에서 메모리 할당을 발생시켜서 GC를 유발하기 때문이다.
이것은 C# 언어 자체의 문제가 아니고 mono쪽의 구현 문제이다.
C# 스펙 문서에도 foreach 최적화에 대해 언급이 있는데 mono에서 제대로 구현하지 않았다.
MS의 닷넷프레임워크에서는 이런 문제가 없다. 그리고 근래의 mono에도 없다.
단 unity는 오래된 버전의 mono를 사용해서 foreach가 문제가 된다.
다행히 얼마 전에 unity가 mono를 업그레이드 하겠다는 계획을 발표했다. 현재 개발자들이 테스트할 수 있는 버전이 나왔고 지금은 컴파일러 부분만 개선되었다(즉 라이브러리 업그레이드는 아직이다).
http://forum.unity3d.com/forums/experimental-scripting-previews.107/
이것을 설치해서 foreach를 사용해보면 문제가 해결된 것을 볼 수 있다.
장래에 unity를 공부할 때 오래된 글만 보면 실수 할 수 있으니 unity가 새 버전이 나올 때마다 잘 살펴보기 바란다.
출처: http://neue.cc/2016/08/05_537.html
번역 http://sitetrans.naver.net/?rel=http://neue.cc/2016/08/05_537.html&srcLang=ja&tarLang=ko
댓글