(연관된 글이 1개 있습니다.)
안녕하세요. 항상 좋은 글 잘 읽고 있습니다.
C#으로 게임을 하나 만들고 있습니다. 게임에서는 GC Peak이 굉장히 큰 영향을 끼치는데요 게임 플레이 중에는 GC를 중단하고 게임이 끝나고 메뉴로 돌아오면 그 때 GC를 한번에 수행하고자 합니다.
Unity 에서는 Incremental GC 라고 해서 프레임 시간 (60Hz, 16.7ms) 내로 GC 작업을 분할하여 수행하는 좋은 기능이 있는데 .NET Core 기반으로 만든 일반 C# 프로젝트는 그런 GC 방식이 없더군요
GC.TryStartNoGCRegion 메서드를 발견하긴 했습니다만 문제는 저걸 수행하는 동안 메모리가 일정 할당을 넘어버리면 EndStartNoGCRegion을 할 때 예외가 발생해버립니다.
남은 방법이라곤 .NET Core 2.0에서 추가된 Custom GC를 통한 방법 같은데 C++ 경험이 거의 없어서 힘들군요 ㅜㅜ
물론 가장 좋은건 게임에서 할당을 자제하는 것이지만 문제는 제 로직은 할당이 적은데 기반 프레임워크가 할당이 많아서 (WPF와 Win2D를 조합하여 개발하고 있는데 WPF가 할당이 좀 많습니다) 한계가 있습니다. 성능 프로파일링을 해보면 할당의 90% 이상이 presentationframework.il 입니다.
혹시 좋은 방법이 있을까요? 감사합니다.
[연관 글]
[최초 등록일: ]
[최종 수정일: 5/23/2022]