首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取snapshot .snapshot的Mono的堆快照?

如何获取snapshot .snapshot的Mono的堆快照?
EN

Stack Overflow用户
提问于 2013-10-01 20:25:58
回答 2查看 5.2K关注 0票数 6

背景:我正在试图追踪Xamarin.Android应用程序中的内存泄漏。使用DDMS和Eclipse内存分析器,我能够看到哪些对象是活动的。当我试图跟踪是什么让他们活着(GC根)时,我只看到了“本机堆栈”(当然)。

我如何才能获取MONO的堆快照?所以以后我可以把它和堆弹工具一起使用吗?

或者,在Xamarin.android的.NET部件中,我还可以使用其他什么技术来找到一个活着的对象呢?在程序中可以做些什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 21:13:47

我如何才能获取MONO的堆快照?所以以后我可以把它和堆弹工具一起使用吗?

现在可以获得Mono的堆快照(使用Xamarin.Android 4.8.2beta进行测试;可能适用于以前的版本,您的里程可能有所不同)。这是一个四个步骤:

  1. 启用堆记录: 亚洲开发银行外壳设置程序debug.mono.profile日志:堆射
  2. 启动你的应用程序。(如果您的应用程序已经在(1)之前运行,请关闭并重新启动它。) 使用你的应用程序。
  3. 获取应用程序的配置文件数据: 亚行拉/data/data/@PACKAGE_NAME@/files/.__override__/profile.mlpd @PACKAGE_NAME@是应用程序的包名,例如,如果您的包是FooBar.FooBar-Signed.apk,那么@PACKAGE_NAME@将是FooBar.FooBar
  4. 分析数据: profile.mlpd报告 mprof-report包含在Mono中。

注意事项:只有在发生GC时才更新profile.mlpd,因此您可能需要在某个“知名”点调用GC.Collect(),以确保profile.mlpd定期更新。

票数 12
EN

Stack Overflow用户

发布于 2014-02-11 14:25:31

我一直在处理Xamarin Android内存分析方面的问题,并使用了一些技巧:

  1. 在Dalvik端,我使用Android转储堆快照,然后用JProfiler或Eclipse打开它。这个标准的机器人。
  2. 我的代码有很大一部分是共享的(70-80%),为了验证这一点,我构建了一个简单的WinForms应用程序来驱动共享API。通过这种方式,我可以使用.Net内存探查器(或者蚂蚁(如果您愿意)和dotTrace来实现性能。这样我就能很容易地挑出很多问题。
  3. 通过使用上面的@jnop解释的解决方案,我可以在Mono的profile.mldp工具中打开HeapShot,并获得一个可视化工具,而不是‘s报告的文本输出。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19125266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档