메모리 그래프 도구를 사용하여 MVVMCross 애플리케이션에서 메모리 누출을 식별하려면 일반적으로 Xcode를 사용하여 iOS 개발에 적용 가능한 다음 단계를 따라갈 수 있습니다. MVVMCross는 크로스 플랫폼 프레임 워크이지만 메모리 그래프 도구는 Xcode 내의 iOS 개발에만 해당됩니다.
메모리 그래프 디버거 사용
1. 메모리 그래프 디버거로 앱을 시작합니다. **
- Xcode에서 프로젝트를 열고 디버그 모드에 있는지 확인하십시오.
- 디버그 메뉴로 이동하여 디버그 메모리 그래프를 선택하십시오. 메모리 그래프 디버거가 활성화 된 앱을 시작합니다.
2. 핵심 흐름을 통과하는 실행 : **
- 뷰 컨트롤러 개방 및 닫기, 데이터 바인딩과 관련된 동작 수행 및 메모리 할당이 포함될 수있는 기타 중요한 경로와 같은 앱의 핵심 흐름을 탐색하십시오.
- 메모리 사용이 예기치 않게 증가하는지 확인하기 위해 이러한 흐름을 여러 번 반복하십시오.
3. 메모리 스냅 샷 가져 오기 : **
- 이러한 흐름을 실행 한 후 디버그 메모리 그래프 버튼을 다시 클릭하여 메모리 스냅 샷을 사용하십시오. 이렇게하면 앱이 일시 중지되고 현재 메모리 상태의 스냅 샷이 제공됩니다.
4. 메모리 스냅 샷 검사 : **
- 메모리 그래프 디버거에는 메모리의 객체의 그래픽 표현이 노드로서, 가장자리 사이의 관계와 함께 표시됩니다.
- 더 이상 기억에 안되는 개체를 찾으십시오. 예를 들어, 처리 된 뷰 컨트롤러 또는 뷰 모델의 여러 인스턴스를 볼 때 메모리 누출이 나타날 수 있습니다.
5. 새는 물체 식별 : **
- 메모리에 없어야하는 객체를 나타내는 노드를 클릭하십시오. 디버거는 해당 객체에 대한 모든 참조를 보여 주어야하는 이유를 확인하는 데 도움이됩니다.
- 객체 그래프를 사용하여 유출 된 물체를 메모리에 유지하는 상위 노드 또는 객체를 추적합니다.
6. 누출 수정 : **
- 누출의 출처를 식별 한 후에는 코드를 검토하여 강력한 참조가 어디에 있는지 확인하십시오. 일반적인 문제는 다음과 같습니다.
- 미공개 이벤트 처리기.
-보기 모델에서 강력한 참조는 뷰 또는 약한 객체에 대한 강력한 참조입니다.
- 데이터 바인딩의주기를 유지합니다.
7. 수정 확인 : **
- 잠재적 누출을 해결하기 위해 변경 한 후에는 코어 흐름을 통해 실행되는 프로세스를 반복하고 메모리 스냅 샷을 가져와 메모리 사용이 예기치 않게 증가하지 않도록하십시오.
교차 플랫폼 개발을위한 추가 도구
메모리 그래프 도구는 iOS에만 해당되지만 MVVMCross와 같은 크로스 플랫폼 프레임 워크의 경우 다른 플랫폼에 플랫폼 별 도구를 사용해야 할 수도 있습니다.
- Android : Android Profiler 또는 Leakcanary를 사용하여 메모리 누출을 감지하십시오.
- Windows (Maui) : Visual Studio의 진단 도구 또는 MemoryToolkit.maui와 같은 타사 라이브러리와 같은 도구를 사용하여 메모리 누출을 식별합니다.
이러한 접근 방식을 결합하면 다양한 플랫폼에서 MVMCross 응용 프로그램에서 메모리 누출을 효과적으로 식별하고 수정할 수 있습니다.
인용 :[1] https://www.reddit.com/r/dotnetmaui/comments/1c1qlou/maui_memory_leaks/
[2] https://proandroiddev.com/memory-leaks-in-reactive-droid-programming-a4ad2b34466a
[3] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycey-detection-using-xcodes-memory-graph-debugger/
[4] https://www.netguru.com/blog/what-are-ios-memory-leaks-and-to-detect-tem
[5] https://www.linkedin.com/advice/1/how-can-you-prevent-more-leaks-mvvm-skills-software-design-hsx1c
[6] https://developer.android.com/studio/profile/memory-profiler
[7] https://github.com/dotnet/maui/wiki/memory-leaks
[8] https://forums.developer.apple.com/forums/thread/713062
[9] https://www.tothenew.com/blog/memory-leak-with-memory-graph-debugger/