【问题标题】:Apple Instruments slows down app when analyzing memory allocationsApple Instruments 在分析内存分配时会降低应用程序的速度
【发布时间】:2013-08-15 06:46:48
【问题描述】:

在模拟器中运行我的应用程序并使用 Instruments 分析其内存分配时,应用程序运行速度非常慢,它的运行速度不到正常速度的 1/30。

该应用程序使用大约 50 MB RAM 并拥有大约 900,000 个生命对象(根据 Instruments)。

这可能是性能缓慢的原因吗?

当在设备上的应用程序或模拟器中运行而不使用 Instruments 时,它表现良好(除了我尝试调试的内存问题)。

  • 您对如何解决此问题有任何想法吗?
  • 您是否在使用内存分配时遇到性能下降的问题 仪器?
  • 你会考虑拥有超过 900,000 的生命 对象“有关”?

【问题讨论】:

  • 我在使用模拟器时遇到了性能问题。当我试图测量/观察的性能没有发挥作用时,我只在模拟器上进行检测。否则,仪器也会减慢设备中的进程,但程度要小得多。但是,泄漏仪器每 10 秒就会对性能造成重大影响。
  • 预计仪器运行时会增加开销。如果您的应用分配了大量的对象,预计会有大量的开销。
  • 有点离题,但请记住,模拟器对于评估实际内存使用情况几乎没有用处。请记住,它是一个 API 模拟器,而不是硬件模拟器。如果您遇到内存问题,您必须在真实设备上进行配置。

标签: ios objective-c memory-leaks instruments


【解决方案1】:

检查您是否有足够的可用磁盘空间。我还剩下 8gb,看起来太少了。仪器非常缓慢。刚开始用了一分钟,根本没有绕开。

我清理了更多磁盘空间,然后它突然恢复到以前的速度。

【讨论】:

    【解决方案2】:

    考虑您的分析器性能问题

    在您的特定情况下,无需长时间监控应用程序,因为您很快就会达到高内存消耗状态。此时您可以简单地停止录制。这样您就不会在浏览不同的视图和统计信息以查找内存问题的原因时遇到问题。

    分析内存问题

    减速是正常的。 1/30 听起来相当惊人

    您可能应该在使用应用程序时跟踪生命对象的数量和内存使用情况的变化。

    很难确定某个特定时间点的一定数量的生命物体是否至关重要(尽管 900,000 似乎很高)。

    一般来说:如果生命对象和内存使用量持续增长并且没有缩小,那就是一个不好的迹象。

    如果您看一下Statistics -> Object Summary(屏幕截图),Live Bytes 应该比 Overall Bytes 小很多,#Living 对象的数量应该比 #Transitory 对象的数量小很多。

    您可以查看的第二个内容是Call Tree 视图。 它可以让您很好地了解应用程序的哪些部分负责保留大量内存:

    可能的解决方案

    一旦您检测到负责保留大量内存的代码部分,您就可以寻找保留周期,或者您可以尝试在该位置使用更多的自动释放池。

    【讨论】:

    • 我在我的问题中添加了 Instruments 的屏幕截图。生命对象和瞬态对象等之间的关系似乎还可以。但绝对数字让我感到担忧。您对如何解决此问题有任何提示(考虑到仪器的性能缓慢)?我正在将具有深层层次结构的非常复杂的 XML 文档解析为核心数据。正如 Apple 所记录的那样,我尝试尽可能降低内存占用(通过使用自动释放池、ARC 等),但不知道如何在 Instruments 运行缓慢并在几分钟后停止工作时找到内存问题。
    • 我目前不知道如何提高仪器的性能。一种替代方法是在一两分钟后停止录制,然后分析内存消耗,例如通过查看“CallTree”。我会更新我的答案。
    猜你喜欢
    • 2019-11-12
    • 2012-10-24
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多