【问题标题】:How to take heap snapshot of Xamarin.Android's Mono VM?如何获取 Xamarin.Android 的 Mono VM 的堆快照?
【发布时间】:2013-10-01 20:25:58
【问题描述】:

背景:我正在尝试追踪 Xamarin.Android 应用程序中的内存泄漏。使用 DDMS 和 Eclipse Memory Profiler,我可以看到哪些对象是活动的。在尝试跟踪使它们保持活动状态(GC Root)时,我只看到“本机堆栈”(当然)。

如何获取 MONO VM 的堆快照?所以我以后可以将它与 i.e. heapshot 工具一起使用?

或者我可以使用任何其他技术来查找在 Xamarin.Android 的 .NET 部分中保持对象活动的内容吗?是否可以在程序中做某事?

【问题讨论】:

    标签: android memory-leaks xamarin memory-profiling heap-dump


    【解决方案1】:

    如何获取 MONO VM 的堆快照?所以我以后可以将它与 i.e. heapshot 工具一起使用?

    现在可以获取 Mono VM 的堆快照(使用 Xamarin.Android 4.8.2 beta 测试;可能适用于以前的版本,您的情况可能会有所不同)。这是一个四步过程:

    1. 启用 heapshot 日志记录:

      adb shell setprop debug.mono.profile log:heapshot
      
    2. 启动您的应用。 (如果您的应用在 (1) 之前已经在运行,请终止并重新启动它。)

      使用您的应用。

    3. 获取应用的配置文件数据:

      adb pull /data/data/@PACKAGE_NAME@/files/.__override__/profile.mlpd
      

      @PACKAGE_NAME@ 是您的应用程序的包名,例如如果你的包是FooBar.FooBar-Signed.apk,那么@PACKAGE_NAME@就是FooBar.FooBar

    4. 分析数据:

      mprof-report profile.mlpd
      

      mprof-report 包含在 Mono 中。

    注意profile.mlpd在 GC 发生时更新,因此您可能想在某个“好吧”时调用 GC.Collect()已知”点,以确保定期更新profile.mlpd

    【讨论】:

    • mprof-report 的两个可能有用的选项:--traces 列出了持有对堆上对象的引用的类型以及每个类型的引用计数。 --verbose 生成更完整的引用列表,默认情况下 mprof-report 缩写列表。
    • 有没有关于 mlpd 文件格式的文档?或者一种从日志文件中获取计算机可读数据的方法?
    【解决方案2】:

    我在 Xamarin Android 内存分析方面遇到了麻烦,并且使用了一些技巧:

    1. 在 Dalvik 方面,我使用 Android Monitor 转储堆快照,然后使用 JProfiler 或 Eclipse MAT 打开它。这个标准的 Android。

    2. 我的大部分代码是共享的 (70-80%),为了验证这一点,我构建了一个简单的 WinForms 应用程序来驱动共享 API。通过这种方式,我可以使用 .Net Memory Profiler(或 ANTS,如果您愿意)以及 dotTrace 来提高性能。我可以轻松挑选很多 以这种方式发出。

    3. 通过使用上面@jnop 解释的解决方案,我可以在 Mono 的 HeapShot 工具中打开 profile.mldp 并获得一个可视化工具,而不是 mprof-report 文本输出。

    顺便说一句,应该投票给更好的分析器: http://xamarin.uservoice.com/forums/144858-xamarin-suggestions/suggestions/3229534-add-memory-and-performance-profiler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多