2013-01-11 35 views
1

我正在开发由于内存使用量过多而崩溃的应用程序。我想知道每个活动线程正在使用的内存量,以便我可以决定将哪些分配或绘制的屏幕元素释放或从视图中移除。有没有办法获得它?每个线程使用的内存量

我已经尝试使用mach.h库,但与mach_task_self()我只能访问整个应用程序使用的内存。

在此先感谢

+0

你有没有记忆警告?我的建议是,你使用仪器来查看你分配了多少内存,并检测可能的泄漏,然后看看你是否能够以分配较少内存的方式编写代码。 –

+2

线程不*自己*内存,进程做... – trojanfoe

+0

是的,我在应用程序崩溃之前收到内存警告。我们已经使用过仪器,没有泄漏。我们正在努力以更方便的方式重写代码。谢谢您的回答。 –

回答

1

你不能因为线程共享堆。线程使用512KB stack space创建,并根据需要分配内存页面。除此之外,每个线程值都不存储任何内存。

+0

谢谢!似乎我们必须以更正确的方式重写我们的代码...... –

3

我想你想要的是logMemUsage()

你可以从这个问题检查Watching memory usage in iOS

我想你可以从这个文档也得到的东西: Understanding and Analyzing iOS Application Crash Reports

如果你想check Memory Usage While Application is Running then use Instruments。 :

使用Instruments您可以检查您的应用使用了多少内存。在Xcode4中,使用'Profile'构建,选择Leaks,然后单击工具栏中的Library按钮并添加Memory Monitor instrument

如果你真的不想使用工具,那么你可以使用自定义类UIDeviceAdditionsGet current Memory usage

希望这是不够的。

+0

谢谢你的回答。我会看看它,并重新回答,如果它有用或不正确。仪器只给出应用程序使用的总内存,但不知道它是如何在不同的活动线程之间分配的(或者至少我不知道该怎么做) –

+0

是的,我已经通过了第一个链接并且使用了相同的'我使用'mach_task_self()'。我以这种方式获得的内存是应用程序使用的全部内存,但我不认为它可以用于我正在寻找的内容。无论如何,感谢您的回答和链接。 –

+1

如果您在线程前后使用logMemUsage,并且如果从beforeMemoryUsage中减去afterMemoryUsage,那么我认为您可以获取该特定线程中消耗的内存。 – Bhavin