相关疑难解决方法(0)

了解iPhone上的内存消耗

我正在使用OpenGL ES开发2D iPhone游戏,并且我一直在达到24 MB的内存限制 - 我的应用程序一直在崩溃,错误代码为101.我试着很难找到内存的位置,但是仪器中的数字仍然很多大于我的预期.

我使用Memory Monitor,Object Alloc,Leaks和OpenGL ES仪器运行应用程序.当应用程序加载时,自由物理内存从37 MB下降到23 MB,Object Alloc稳定在7 MB左右,Leaks显示两个或三个泄漏,几个字节大小,Gart对象大小约为5 MB,内存监视器说应用程序占用大约14 MB的实内存.令我感到困惑的是内存的去向 - 当我深入研究对象分配时,大部分内存都在纹理中,正如我所期望的那样.但是我自己的纹理分配计数器和Gart对象大小都同意纹理应该占用大约5 MB.

我不知道分配任何其他值得一提的东西,Object Alloc同意.记忆在哪里?(如果这还不够,我会很乐意提供更多细节.)


更新:我真的试图找到我可以分配这么多内存的地方,但没有结果.让我疯狂的是对象分配(~7 MB)与内存监视器(~14 MB)所示的实际内存使用之间的差异.即使我忘记了巨大的泄漏或巨大的内存块,它仍应出现在对象分配中,不应该出现吗?

我已经尝试过通常的 嫌疑人,即.在UIImage与它的缓存,但没有帮助.有没有办法逐行跟踪内存使用情况"调试器样式",观察每个语句对内存使用情况的影响?


到目前为止我发现了什么:

  1. 我真的使用那么多记忆.测量实际内存消耗并不容易,但经过大量计算后,我认为内存消耗真的很高.我的错.

  2. 我发现没有简单的方法来衡量使用的内存.内存监视器编号是准确的(这些是真正重要的数字),但内存监视器无法告诉您内存的确切位置.Object Alloc工具几乎无法跟踪实际内存使用情况.当我创建一个纹理时,分配的内存计数器会上升一段时间(将纹理读入内存),然后下降(将纹理数据传递给OpenGL,释放).这没关系,但并不总是发生 - 有时即使将纹理传递给OpenGL并从"我的"内存中释放出来,内存使用率也会保持很高.这意味着Object Alloc工具显示的内存总量小于实际总内存消耗量,但大于实际消耗减去textures(real – textures < object alloc < real).去搞清楚.

  3. 我误读了编程指南.内存限制为24 MB适用于纹理和曲面,而不是整个应用程序.实际的红线位置更远,但我找不到任何硬数字.共识是25-30 MB是上限.

  4. 当系统内存不足时,它会开始发送内存警告.我几乎没有任何东西可以免费,但其他应用程序确实会将一些内存释放回系统,特别是Safari(似乎是缓存网站).当内存监视器中显示的可用内存为零时,系统开始查杀.

我不得不咬紧牙关并重写代码的某些部分以提高内存的效率,但我可能还在推动它.如果我要设计另一个游戏,我肯定会考虑一些资源分页.在当前的游戏中它非常难,因为事物一直处于运动中并且加载纹理会妨碍,即使在另一个线程中完成.我会对其他人如何解决这个问题感兴趣.

请注意,这些只是我的观点,不一定非常准确.如果我发现有关此主题的更多内容,我会更新问题.我会保持问题公开,以防有人理解这个问题会关心回答,因为这些都是比其他任何事情更多的变通办法和猜测.

iphone memory-management opengl-es

35
推荐指数
1
解决办法
2万
查看次数

什么是iOS内存占用的正确统计数据.直播字节?真实记忆?其他?

我在这一点上肯定很困惑.

我有一个iPad应用程序,在对象分配工具中显示"Live Bytes"使用量为6-12mb.如果我拉起内存监视器或活动监视器,"真实内存"列在经过一些严重的使用后一直攀升到80-90mb左右.

那么我是否有正常的内存占用或高内存?

这个答案这个答案声称您应该观看"Live Bytes",因为"Real Memory"列显示已发布的内存块,但操作系统尚未回收它.

另一方面,这个答案声称你需要注意那个内存监视器,因为"Live Bytes"不包括界面元素之类的东西.

什么是iOS内存占用的处理!?:)

memory memory-management diagnostics ios

26
推荐指数
2
解决办法
7382
查看次数

使用乐器减少来自相机的UIImages的记忆

我的应用程序使用ARC,执行以下操作:

  1. 上传相机拍摄的照片
  2. 压缩图片以用作缩略图.
  3. 我这样做是使用[UIImage imageWithData:UIImageJPEGRepresentation(original,0.1f)]
  4. 我将未压缩的图片引用设置为nil,以便ARC释放内存

重复此序列将意味着屏幕上会显示多个压缩缩略图.大约7或8张照片后,应用程序将因内存不足而崩溃.

在Instruments中,我试图将Allocations与Memory Monitor结合使用来查找问题的根源.

一些仪器统计:

分配 - 拍摄照片后,实时字节跳跃大约2 MB,但在原始图片参考设置为nil后,则下降1.5 MB.这似乎是一件好事,但......

这是应用程序的最终状态.#Living似乎相对于Live Bytes而言非常高,对吧?

  Live Bytes  #Living   #Transitory  Overall   #Overall Bytes    
   3.72 MB    24538     80679        90.1 MB   105301
Run Code Online (Sandbox Code Playgroud)

内存监视器(跟踪检查头) - 我的应用程序启动为7.5 MB并拍摄一张图片导致增加~13 MB.对于我上面列出的状态,Memory Monitor表示该应用占用了72.67 MB的"Real Memory"和123.79 MB的虚拟内存.

鉴于Live Bytes非常小,我知道我做得对. 但是,鉴于其他地方的内存占用量很大,我也确定我做错了.任何想法可能是什么,或如何追踪它?

instruments uiimagepickercontroller uiimage ios automatic-ref-counting

6
推荐指数
1
解决办法
1906
查看次数

使用iOS上的Memory Monitor,虚拟内存消耗与实际内存之间的差异

我在我的应用程序中遇到了问题.我一直在测试,直到现在主要是在我的iPad 3上偶尔检查我的iPad 1,以确保一切顺利.

我正在我的应用程序中播放UIImageView动画,它在退出之前只保留"已接收内存警告"消息.

我一直在仪器中使用对象分配工具,但据此,我的内存使用率很低.所以在研究了一下之后,我发现了Larson先生的这篇文章:https://stackoverflow.com/a/5627221/329900

现在我正在使用Memory Monitor工具.但是,我不明白我为什么要放弃.第一代.iPad拥有256MB内存.现在我知道我不能全部使用...有人说你不应该使用超过100MB.

那是真正的记忆,还是虚拟记忆...或者可能是某种组合?我的实际内存一直在20到25MB之间,但崩溃时虚拟内存大约为190 - 205MB.

这是一个截图:在此输入图像描述

有人能够对此有所了解吗?

memory-management instruments virtual-memory ios

6
推荐指数
1
解决办法
3916
查看次数

低内存,640Kb的实时字节?

我的应用程序需要显示大量图像和视频.

运行ObjectAlloc工具后,我看到实时字节为640Kb,当应用程序崩溃时总内存为31,54Mb.

在组织者我得到一个"低内存"报告,所以我猜应用程序崩溃,因为内存不足但ObjectAllocation数据对我没有任何意义...

有任何想法吗?

这是Organizer崩溃日志:

Incident Identifier: CDCAF38C-CFFD-4316-9C4A-5C8E37794B49
CrashReporter Key:   65390aeb97b2b81076576c3e33b025feb5db9202
OS Version:          iPhone OS 3.1.3 (7E18)
Date:                2010-05-19 10:07:19 +0200

Free pages:        372
Wired pages:       12260
Purgeable pages:   0
Largest process:   DTMobileIS

Processes
         Name                 UUID                    Count resident pages
       ATreeTest <1d51c3a5fef8b747c3a1be9405bdd52a>    1150 (jettisoned) (active)
      DTMobileIS <69c3fa96db2f29474d62964aa1a69bfa>    3316
notification_pro <8a7725017106a28b545fd13ed58bf98c>      68
    mediaserverd <3d3800d6acfff050e4d0ed91cbe2467e>     464 (jettisoned)
         syslogd <8eddddc00294d5615afded36ee3f1b62>      56 (jettisoned)
            apsd <32070d91b216d806973c8f1b1d8077a4>     173
     SpringBoard <324939a437d1cca1fa4af72d9f5d0eba>    2475 (jettisoned) (active)
      accessoryd <8f21c8b376d16e2ccb95ed6d21d8317a>      99 (jettisoned)
notification_pro <8a7725017106a28b545fd13ed58bf98c>      64
            ptpd <f5e735bffd0557fcdc53cb35b6d9ce66>     129
         notifyd <591dd4dd804b4b8741f52335ea1fa4ab>      64
      CommCenter …
Run Code Online (Sandbox Code Playgroud)

memory iphone

2
推荐指数
1
解决办法
2387
查看次数

内存使用iPhone限制

应用程序在被iOS踢出之前可以占用多少内存?内存量取决于设备版本吗?我开发了一个使用30+ mb的应用程序,它在iPhone 2g上被踢了.它可以在iPhone 4或3GS上运行吗?

iphone memory-management

2
推荐指数
1
解决办法
3362
查看次数

检查iOS应用程序在仪器中使用的内存

我想确保我正确地读取分配插件.我正在测试一个接收内存警告1,2和3的iPad应用程序.我想知道我的应用程序当前耗尽的内存,我认为它必须是"Live Bytes"列?这标志着All Allocations为2.42 MB我觉得它很低.

其他专栏报道了什么?#Transitory,整体字节?此外,如果我的应用程序仅使用3 MB内存,如果我在没有释放的情况下获得内存级别3警告,它是否会被杀死?

谢谢.

在此输入图像描述

memory instruments ipad ios

2
推荐指数
1
解决办法
4731
查看次数