【问题标题】:Performance decreases after a while especially when device is resting一段时间后性能下降,尤其是在设备休息时
【发布时间】:2013-08-26 08:59:30
【问题描述】:

我有一个使用 Unity 游戏引擎和自写库来访问 Apple 的 Core Motion 框架的 iPhone 游戏。性能在 iPhone 5 上非常出色,过去在 iPhone 4 上性能还不错。

今天在 iPhone 4 (iOS 6.1.3) 上运行我的应用程序会在一段时间后出现帧速率持续下降(5-10 分钟后明显)。大约 20 到 30 分钟后,游戏几乎无法玩,并且似乎以慢动作运行。

奇怪的是:特别是当设备静止在桌子上时,效果会发生。 当我移动设备时,帧率会明显上升,但在没有移动时会再次下降。我发现不是用 C#(Unity 游戏引擎)编写的游戏代码,而是 Obj-C 部分用于处理 Core Motion 的运动控制。

我认为问题开始于我从 iOS 5.1.x 更新到 iOS 6.1.3 的时间,但我不确定。很难确定问题开始的确切时间,因为我在精美的 iPhone 5 上进行了所有更长的测试,而在 iPhone 4 上进行了快速测试(好的,吸取了教训 ;-)。

我使用“旧式”拉取方法来获取 CMDeviceMotion 实例,即 startDeviceMotionUpdates 没有块处理程序。拉取代码在单独的线程中运行,结果证明这是最高效的方式 - 嗯,过去。

Unity 内置的 iOS 分析器(控制台)并没有显示出显着的内存消耗,但我认为本机代码插件在统计中没有考虑在内。据我所知,Xcode 分析器也没有显示任何泄漏。只是大量的内存分配和释放,这让我有点惊讶(我认为在轮询时在内部回收 CMDeviceMotion 实例可能会更快,但谁在乎)。


问题:这个星座在 iOS 6 上是否存在任何已知问题?我的意思是,拉动,在单独的线程中运行,60 Hz,结合 Unity 游戏引擎 + Open GL ES 2,...

【问题讨论】:

    标签: iphone ios unity3d core-motion


    【解决方案1】:

    终于找到了罪魁祸首:deviceMotionUpdateInterval
    更准确地说,经常更改间隔

    根据Choosing a Motion Event Update Interval in Event Handling Guide for iOS 部分,更大的间隔可以提高电池寿命。所以我实现了一些逻辑来在游戏不活跃时将频率降低到 2Hz,即游戏结束、暂停、主菜单……当恢复游戏时,频率再次设置为 60Hz。

    将更改频率的代码注释掉后,问题就消失了。所以我决定不再尝试以这种方式节省电池消耗。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-30
      • 2013-09-27
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多