힙 할당을 감지하는 방법 | Bart Wullems
Bart Wullems님의 How to detect heap allocations을 번역하였습니다.
몇 주 전에 정적 익명 함수와 람다를 사용할 때 힙 할당 횟수를 제한하는 데 도움이 되는 방법에 대해 이야기한 적이 있습니다. 이 포스팅 이후 한 동료로부터 이러한 할당을 감지하는 방법에 대한 질문이 있었습니다.
좋은 질문입니다! 몇 가지 방법을 알려드리겠습니다.
먼저 일반적인 답변을 드리고 두 가지 구체적인 도구에 대해 자세히 살펴보겠습니다.
람다를 사용할 때 과도한 할당을 발견하려면 메모리 프로파일러 도구를 사용하여 *_DisplayClass* 또는 다양한 Action* 및 Func*의 변종 할당을 찾을 수 있습니다.
이 정보를 통해 무엇을 찾아야 하는지 이미 알고 계실 것입니다.
Visual Studio 성능 프로파일러
가장 먼저 도움이 되는 옵션은 Visual Studio의 성능 프로파일러입니다.
빌드 유형을 릴리스로 변경합니다.
이제 디버그 -> 성능 프로파일러...로 이동합니다. 여러 프로파일링 대상을 사용할 수 있지만 .NET 개체 할당 추적 옵션을 사용하고자 하므로 이 확인란을 선택합니다.
- 시작 버튼을 클릭하여 도구를 실행합니다.
- 시작 버튼을 클릭하여 도구를 실행합니다.
- 프로파일링된 애플리케이션을 닫거나 수집 중지를 클릭하면 할당 탭에서 모든 할당을 볼 수 있습니다.
자세한 정보 .NET 개체의 메모리 사용량 분석 - Visual Studio(Windows) | Microsoft Learn
Roslyn Clr 힙 할당 분석기
또 다른 옵션은 명시적 할당과 박싱, 디스플레이 클래스(클로저라고도 함), 암시적 델리게이트 생성 등과 같은 많은 암시적 할당을 감지할 수 있는 Roslyn 기반 C# 힙 할당 진단 분석기입니다.
프로젝트에 NuGet 패키지로 직접 설치할 수 있습니다:
dotnet add package ClrHeapAllocationAnalyzer
다른 분석기와 마찬가지로 인라인 힌트를 제공합니다:
관련 경고 확인:
실제로 작동하는 모습을 보고 싶으시다면 다음 동영상을 참조하세요:
참고: JetBrains Rider를 사용하는 경우, 힙 할당 뷰어 플러그인을 사용하여 동일한 작업을 수행할 수 있습니다.