Skip to main content

힙 할당을 감지하는 방법 | Bart Wullems

Published 2 min readMarkdown

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를 사용하는 경우, 힙 할당 뷰어 플러그인을 사용하여 동일한 작업을 수행할 수 있습니다.


No comments yet. Be the first to comment.

More from this blog