【问题标题】:Why can't instruments track my memory usage?为什么仪器不能跟踪我的内存使用情况?
【发布时间】:2013-01-12 02:47:21
【问题描述】:

我正在为 App Store 开发一个应用程序,但在内存管理方面遇到了奇怪的问题。

我正在使用 ARC。

在连接到 Instruments 的未越狱的 iPod touch 4G 6.0.1 上测试我的应用程序时,一切似乎都很顺利 - 我的应用程序使用的内存不到 5mb时间,没有泄漏。然而,经过长时间的使用,尽管仍然在仪器中被监控为 杀死。我在后台没有任何打开的应用程序,所以我假设我的应用程序正在泄漏内存,仪器无法跟踪。怎么会这样?

此外,我开始使用一个函数来跟踪内存使用情况,特别是:

 struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        return info.resident_size/1024.0/1024.0;
    } else {
        return -1.0;
    }

它似乎报告了我的应用程序行为可能预期的内存使用范围 (60-70Mb)。我在 Instruments 中同时进行测量,它仍然显示 ~3-4Mb。这是怎么回事?

【问题讨论】:

    标签: iphone ios objective-c memory instruments


    【解决方案1】:

    Allocations 工具只跟踪堆内存,它只是整个运行应用程序内存使用的一小部分。

    看一下VM Tracker instrument,就是整个虚拟内存使用统计,说不定就能找到问题所在。

    【讨论】:

      【解决方案2】:

      仪器可能跟踪堆分配而不是总地址空间消耗。如果您的应用导致大量文件被内存映射,则可能会导致堆分配量(malloc 等)较少,但应用的系统内存消耗较高。

      如果不了解您的应用的更多信息,则无法真正推测超出上述范围。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-01
        • 2011-05-16
        • 2013-01-14
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        • 2017-06-17
        • 2017-02-14
        相关资源
        最近更新 更多