gpt4 book ai didi

ipad - 我的纹理密集型游戏应用程序对iPad1的内存之谜

转载 作者:行者123 更新时间:2023-12-03 16:35:23 26 4
gpt4 key购买 nike

抱歉,标题含糊,但不太确定如何总结这一标题。

事实是:

  • 我有一个经过Apple认可并在App Store上的游戏。
  • 这是一个通用应用程序。它在小屏幕上使用为320x480设计的纹​​理,在视网膜和iPad屏幕上使用较大的纹理(大约是其四倍)。
  • 在开发它时,有时会在控制台日志中看到内存不足的警告,但是在阅读了这些警告后,它们似乎常常是虚假的/不重要的,无论如何我都没有崩溃,并且我的测试人员在各种情况下的设备(iPod Touch第2代,iPod Touch第4代,iPhone3,iPhone4,iPad1,iPad2)没有崩溃。
  • 当我开始通过TestFlightApp将应用程序分发给更广泛的Beta测试人员时,我收到一些报告,称有人在加载应用程序时或在用户从主菜单中选择一个级别并加载应用程序后不久看到崩溃关卡纹理。我们发现,如果这些用户只是重新启动设备,他们将不再有问题。由于这是我们第一次看到这样的问题,我们将其归因于TestFlightApp正在执行的操作,有些有趣的状态是安装后它仍留在设备中(我们与TestFlightApp进行了交谈,而他们从未听说过这样的事情) )。
  • 如上所述,Apple批准了该应用程序,该应用程序已在App Store中发布。它上线后不久,我们收到一些iPad1用户的报告,报告称它们在应用程序加载时崩溃了,或者此后不久,这种情况与某些TestFlightApp用户所看到的相同。这些客户再次类似于TestFlightApp用户,报告说重新启动通常可以解决问题。但这不是那么好,因为该问题倾向于再次出现。这些用户之一向我发送了几个LowMemory ... log文件,这些文件是她在同步iPad后从PC中取出的。大约有10个这样的文件,但没有一个在“进程”列表中列出了我的程序。取而代之的是,它显示了其他标记为( Activity )或(已简捷)的程序,“最大进程”可以是从MobileSafari到Kobo的任何程序,但我自己的应用程序也从未列出。因此,我不明白这一点,但最重要的是,至少对于该用户而言,某些事情将内存推到了我的应用无法正常运行的某个限制。
  • 此后,我回去与一位TestFlightApp beta测试人员进行了交谈,事实证明,他确实有时确实再次使应用程序崩溃,因此,这不仅仅是TestFlightApp的残余。但是,对于他来说,撞车的频率比该客户要少得多。
  • 该游戏的其他iPad1测试人员从未遇到任何麻烦。他们报告说,他们每天玩游戏几个小​​时,将iPad与其他几个应用程序一起使用,并且很少关机。同样,我的iPod Touch 4th gen从未遇到过崩溃,它与iPad1类似,它具有高分辨率屏幕,但只有256k RAM。

  • 因此,对我来说,这非常神秘,这些特定用户的iPad可能有何不同。重启设备后游戏可以正常工作是很神秘的,但是某些应用程序运行后(有时)游戏无法加载。我的理解是,如果我的游戏需要内存,则操作系统将根据需要自动关闭正在运行的任何其他应用程序,以有效地将内存量恢复到刚重启的设备上可用的容量。我唯一的结论是,在运行某些应用程序后,设备将处于可用内存较少的状态,因为操作系统无法回收某些内存块或关闭某些应用程序。

    不幸的是,我没有开发这些“行为异常”的设备之一。我所能做的就是尝试将应用程序的内存需求减少一定量,然后将其发送给遇到麻烦的这些用户之一,看看它是否可以解决问题。但是,这似乎是一种潜在的低效方法。

    有人有更好的主意吗?

    最佳答案

    听起来纹理加载期间的内存高峰是导致该应用在某些设备上终止的原因。加载所有内容后,它可能会比在初始加载即将结束时使用更少的内存。这可以通过将事物压入虚拟内存来解释,而直接纹理加载可能会通过过多的分配轰炸RAM。我的建议是:

  • 更加积极地在加载过程中破坏临时数据结构(release在所有有用值被其他事物读取/提取后立即创建临时结构)
  • 对于autorelease d对象,请始终保持NSAutoreleasePool不变。如果使用数量过多的drain d对象,您甚至可能希望在一种方法的过程中多次alloc并重新autorelease一个池。
  • 这听起来可能很愚蠢。.故意减慢了加载过程。如果您摆脱了并行化的加载(一次加载多个对象)或可能在加载线程/方法中插入了手动时间延迟,则这可能会使操作系统有更多时间将内容推送到虚拟内存,因此Watchdog不会将应用程序检测为作为一个RAM猪。

  • 编辑:一种实现较慢加载的可能策略:如果/当您收到内存不足警告时,暂停或缓慢加载几秒钟,以使其他应用程序有时间降低其内存使用量,然后以正常速度继续加载。

    即使我错了(如果 LowMemory...log文件显示了Virtual + Physical用法,因此您的应用程序执行的也不多),我还是建议您集成错误报告(例如 QuincyKit ),以便在此情况下通过电子邮件发送回溯和崩溃说明错误是在野外遇到的。

    关于ipad - 我的纹理密集型游戏应用程序对iPad1的内存之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142402/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com