为什么Xcode会显示比Instruments for SceneKit应用更多的内存使用?

时间:2018-12-10 22:48:49

标签: ios scenekit arkit

我正在尝试调试为什么我们基于SceneKit的应用程序使用了如此多的内存,但是Xcode和Instruments / Allocations对于所使用的内存量似乎具有非常不同的值。当我查看Xcode时,会看到类似 600 MB 的信息,但是当我将同一个正在运行的会话转移到Instruments / Allocations时,我看到的持久字节数却大不相同,例如 150 MB

哪个是正确的?为什么会有所不同?他们在测量不同的东西吗?

(无论我是传输Xcode调试会话还是在Instruments中重新启动,似乎都没有太大区别。)

Xcode screenshot Instruments screenshot

我关心的原因是iOS出于过多的内存使用而杀死了该应用程序(根据Xcode),但是我似乎无法通过Instruments找到问题所在。

我尝试关闭所有GPU和Metal调试选项,但它们似乎没有什么作用。

Xcode debug scheme options enter image description here

2 个答案:

答案 0 :(得分:1)

  

哪个是正确的?

我的直觉是:仪器。它使用Dtrace(抱歉)对您的代码进行检测,并观察实际发生的实际分配和释放,以牺牲性能为代价。 Xcode调试导航器的内存图更多是外部视图,旨在使人们对发生的事情有一个非常一般的认识。这就是为什么后者为您提供了一种切换到前者的方法的原因-因为(仪器)是您进行实际测量的地方。

(但是,请记住,Instruments可能无法包含在总数中,您会看到一些用于图形的虚拟内存后备存储。有许多WWDC视频对此主题进行了更详细的讨论。)

答案 1 :(得分:0)

我知道这个答案已经很晚了,但为了将来遇到同样问题的开发人员,我建议您检查资产文件夹中的图像。如果您的任何图像尺寸大于 1000 x 1000,您应该缩小它们。在上面的示例中,图像由 1000000 像素组成。按照图像的加载方式(每像素 4 个字节),这意味着 4 MB 的内存用于加载图像。我不知道的是,我的资产文件夹中有一个大约 3600 * 4000 的图像。算一算,这超过 50 MB 的内存使用量!