Xamarin.ios 使用profiller工具在monotouch和mvvmcross中进行Memoryleak搜索

Xamarin.ios 使用profiller工具在monotouch和mvvmcross中进行Memoryleak搜索,xamarin.ios,garbage-collection,mvvmcross,Xamarin.ios,Garbage Collection,Mvvmcross,我一直在努力消除mono touch中的内存泄漏,在过去几天里我学到了很多东西,例如,在垃圾收集成功之前,几乎总是有一些事件需要取消挂钩:) 但现在我一直在玩profiller工具,我可以看到大部分内存都被字符串使用(或者看起来是这样),请查看以下屏幕转储: 但正如你所看到的,mono也使用了一些内存。我一直在使用我们的视图模型和视图,其中大多数都是垃圾收集的。如果我查看它们有时被引用的字符串,我不知道如何处理这些信息。 如果我能减少字符串使用的内存量,你们有什么建议吗:)我试着找一些教程或

我一直在努力消除mono touch中的内存泄漏,在过去几天里我学到了很多东西,例如,在垃圾收集成功之前,几乎总是有一些事件需要取消挂钩:)

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

但正如你所看到的,mono也使用了一些内存。我一直在使用我们的视图模型和视图,其中大多数都是垃圾收集的。如果我查看它们有时被引用的字符串,我不知道如何处理这些信息。
如果我能减少字符串使用的内存量,你们有什么建议吗:)我试着找一些教程或类似的东西来解释这些数字的含义,但运气不好。非常感谢您的帮助。

根据我的个人经验,我给出了一些答案:

  • 对于教程,我只知道

  • 我发现“反向引用”选项是最有用的特性之一——重要的不是你有很多字符串,而是什么拥有这些字符串

  • 我发现发现发现这些bug的最佳方法是在一个简单的测试工具和/或测试序列中重现它们——随着应用程序变得越来越大,我以越来越多的异步方式使用越来越多的组件——MvvmCross、JSON.Net、SQLite Net等,然后我发现我需要减少这些组件的数量来识别漏洞

  • 一旦您有了一个简单的测试工具,HeapShot中的filter选项就会有所帮助,因为它允许您关注已知名称空间中的类

  • 一旦您有了一个简单的测试工具,那么比较两个HeapShot也会有所帮助-测试UI中的哪些操作会导致HeapShot之间的增加

    差异才是最重要的-一些库故意将内容缓存在内存中-例如,HeapShot映像中的某些属性信息可能会被其中一个库故意缓存,以提高反序列化速度


为便于交叉引用,请向链接问题添加链接:


    • 除了斯图尔特的精彩回答之外,我想强调的是,您应该在设备上配置个人资料。调整设备上的执行以获得运行时性能,同时调整模拟器以获得构建性能(以便编辑调试周期尽可能快)。除此之外,这意味着在模拟器中,运行时使用的内存比设备上使用的内存要多。

      还有一点。。。如果你已经这样做了几天,那么你现在是一个专家了——你很想在某个地方看到一篇关于你所学到的东西(好的和坏的)的帖子