iOS上Font引起的莫名CPU Spike
来源:互联网 发布:小学生编程需求 编辑:程序博客网 时间:2024/06/03 20:59
我们做了个很简单的demo,在mainmenu上点击一个Start按钮后,隐藏这个菜单并加载HUD,此时会发现Start被点击后过了2秒左右才弹起来,然后HUD才出现。
这个让我摸不着头脑的bug存在了两天,走了如下几条弯路:
- Singleton的localization在第一次调用Instance时载入localization.xml,怀疑这个载入消耗的时间过长;
- 在可能的地方加Debug.log()打印各个调用消耗的时间,虽然都很短,但注释掉某条语句后暂停现象立刻消失,因此怀疑有coroutine存在,但一直没找到;
- 因为迟迟找不出协程,又回过头去怀疑localization manager中的Dictionay<string, string>用string作为key查找效率会很低。
可是,事实也就和第二条有点关系。而发现最终原因的方法是使用了合适的工具:profiler。选择做profile的原因是我想看看这超长的一帧里到底都做了些啥。
最后,发现了这个罪魁祸首:Font.CacheFontForText。Unity Forum有人回复“CPU spike will happen when attempting to render glyphs that aren't currently in the font map for the dynamic font file.” 在我们的bug出现步骤里,原先UI上的text是英文,所以只有英文的font,当点击start以后加载HUD,而HUD上有中文的localized text,所以Unity会rebuild font texture来把所有的中文字符加载的这个贴图中去,当然这是在font导入时选择dynamic的机制。据说如果用static font style就不会有这个bug出现,但static的话就会在内存中占用几兆内存。
所以,我最终的解决方法是把Start按钮的text也用localization替换,因此点击start后就不再会出现cpu spike了。
经验:
不能一下洞察问题的原因时就赶紧想想该找什么工具帮忙吧!“君子性非异也,善假于物也”
0 0
- iOS上Font引起的莫名CPU Spike
- ComboBox.AutoCompleteMode 属性引起的莫名错误
- 解决TextView引起的莫名崩溃
- 对象名和函数名同名引起的莫名错误
- 由IOS上编译Lame引起的一些事情
- 安卓so文件编译选项引起的intel cpu上无法运行的问题
- RISC-V的Spike模拟器
- MSN引起CPU占用率100%的解决
- Sqlserver 有Email引起的 高CPU
- CPU引起的不定时死机问题
- CPU转接卡引起的故障
- JAVA线程引起的CPU满负载
- 由定期作业引起的CPU峰值
- 莫名的
- 阿里云服务器上的 tomcat 莫名被杀掉
- centos7下redis莫名的链接不上
- 手机上的CPU
- ios开发鸡肋之莫名奇妙的错误
- ftp推送
- 图片选择器
- 简易文件管理器实现
- mybatis 从数据库查询的信息不完整解决办法
- 关于文件-NIO
- iOS上Font引起的莫名CPU Spike
- 使用wordpress建立多站点及网站维护
- CXF入门
- 下拉刷新SwipeRefreshLayout
- hdoj Flow Problem 3549 (最大流入门)
- VBA访问网页获取数据
- 记录——《C Primer Plus (第五版)》第十章编程练习第六题
- 插入排序
- HDU4472 Count DP