xamarin.ios - 使用 profiller 工具在 monotouch 和 mvvmcross 中寻找内存泄漏

标签 xamarin.ios garbage-collection mvvmcross

我一直在努力消除我们的单声道触摸中的内存泄漏,并在过去几天里学到了很多东西,例如在垃圾收集成功之前,几乎总是需要解除一些事件:)

但是现在我一直在玩 profiller 工具,我可以看到大部分内存被字符串使用(或者看起来),请参阅以下屏幕转储:
enter image description here

enter image description here

但是正如您所看到的,单声道也使用了一些内存。我一直在研究我们的 View 模型和 View ,其中大部分都是正确的垃圾收集。如果我查看字符串,它们有时会被引用,我不知道如何处理这些信息。
如果我可以减少字符串使用的内存量,你们有什么建议吗:) 我试图找到任何教程或类似的东西,可能会揭示这些数字的含义,但没有运气。任何帮助表示赞赏。

最佳答案

一些个人经验的回答:

  • 对于教程,我只真正了解 http://docs.xamarin.com/ios/Guides/Deployment%252c_Testing%252c_and_Metrics/Monotouch_Profiler
  • 我发现“反向引用”选项是最有用的功能之一——重要的不是你有很多字符串,而是拥有这些字符串的人。
  • 我发现寻找这些错误的最好方法是在一个简单的测试工具和/或测试序列中重现它们 - 随着应用程序变得越来越大,我使用越来越多的组件 - MvvmCross、JSON.Net、SQLite-net 等 - 更多和更多的异步方式,然后我发现我需要减少这些组件的数量来识别泄漏。
  • 一旦你有了一个简单的测试工具,HeapShot 中的过滤器选项就会有所帮助——因为它让你专注于已知命名空间中的类。
  • 一旦你有了一个简单的测试工具,那么比较两个 HeapShot 也会有所帮助——你的测试 UI 中的哪些操作会导致 HeapShot 之间的增加?

    差异很重要 - 一些库故意在内存中缓存东西 - 例如HeapShot 图像中的某些 PropertyInfo 可能会被其中一个库故意缓存,以提高反序列化速度。


  • 为了更容易交叉引用,添加链接问题的链接:
  • Garbage collecting issue with Custom viewbinding in mono touch and mvvmcross
  • when to release objects in mono touch / mvvmcross
  • MVVMCross - SqlBits Memory Leak
  • Helping the GC in mono droid using mvvmCross
  • 关于xamarin.ios - 使用 profiller 工具在 monotouch 和 mvvmcross 中寻找内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812636/

    相关文章:

    java - 简单的 CLI Java 程序不断消耗越来越多的内存

    MvvmCross 检测 RequestClose 或后退按钮按下

    c# - 在无限循环中创建的对象的垃圾收集

    android - Mvvmcross Bind Click 仅在获得焦点后触发

    windows-phone - MvvmCross 在 Windows Phone 设计器中抛出 NullReferenceException

    ios - Xamarin、MVVM交叉和崩溃报告

    ios - RTF相当于UIWebView的loadHTMLString?

    c# - 从 Xcode 迁移到 MonoTouch - iPhone

    ios - Xamarin.ios - 使用 NBuilder 构建模拟抛出 TypeCreationException

    c# - .net List<T> 修剪多余的部分