IL2CPP的内存问题

IL2CPP的内存问题

1)IL2CPP的内存问题
2)Log导致的内存泄露问题
3)Profiler中的Built_in Resources中的内存
4)华为P30视频播放异常
5)有关UWA GOT的疑问


这是第191篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Mono

Q:最近看问答上面有个关于IL2CPP和Mono的对比,看到IL2CPP内存冲高会下降。关于这个,我问了Unity的官方技术,回答是:你好,Unity有自己的GC机制,为了避免频繁向操作系统申请/释放内存,Reserved Mono值会保持在一定区间内,达到某些条件或在某些特殊情况才会触发GC。 又问了性能狗的技术,回答是:内存池管理逻辑都是一样的,属于上层管理一样。它们只是中间语言不一样而已,也是只涨不降。问了其他2个大佬,都是说IL2CPP冲高会下降。现在很困惑,求解答。

A:看下来题主说的内存冲高不降,涉及两个指标,一个是Profiler里的Reserved Mono,一个是设备内存(PSS)。目前确实没有权威的文档说明这一点,所以下面通过真实数据来说明一下。

先说第一个(Reserved Mono)。

  1. 在Script Backend是Mono的情况下,如果选择的是旧版本里的Mono 2.x,或者新版本里的 .Net 3.5(Runtime Version),那么这个值是只升不降的。比如这个数据,Unused已经很高了,但也不会下降:

  2. 同样在Script Backend是Mono的情况下,如果选择的是.Net 4.x (Runtime Version),那么这个值是可以下降的(但不确定具体是从哪个版本开始的)。比如这个数据,可以看出虽然会下降,也并不是频繁执行下降操作的:

  3. 最后Script Backend是IL2CPP的情况下,那么这个值也是可以下降的。比如这个数据,看上去和上面的情况相差不是太大:

而对于第二个,设备内存。这个就和安卓系统的内存管理机制有关了,即使Unity把Reserved Mono降低了,减少了自身的内存占用,系统也不一定会立即会把这块内存释放,所以这里的行为就很难说清楚了。

该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e1d877ffd2e373ffa7eab3b


Memory

Q:跑了两个多小时,使用UWA GOT查看,最大的内存泄漏居然发生在Debug.LogWarning,这个合理吗?

A:很有可能你的Log被索引了,比如被全局变量索引,然后你的Log还在不断增加。

该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e44df0b86a3954891983838


Resource

Q:真机调试的时候,Profiler中的Built_in Resources中会显示比如Arial字体的占用,请问下这部分的开销需要关注吗?

A:一般都不需要,大部分是Developement Build引入的,比如题主所说的Arial字体。

该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e45141186a395489198383c


Video

Q:在Unity 2018.3.7中使用了Unity自带的VideoPlayer来播放视频,项目和安卓工程进行了融合,在华为P30手机上无法播放视频。

  • 视频格式为Mp4文件
  • 视频在华为P30上单独可以播放
  • 视频放在Unity工程的StreamingAssets中(因为融合的问题,使用VideoClip会导致所有的安卓手机上都无法播放,所以放在这个目录下,通过URL传递给VideoPlayer播放)

请问有人知道怎么解决吗?或者如果谁手中有华为P30可以测试,麻烦帮忙测试一下,或者能帮我给一个运行时候无法播放给的信息提示,感谢。

A1:我们也遇到同样的问题,尝试过:

  • 降分辨率、降码率
  • 放到Asset目录下使用内置转码
  • 更换文件格式(WebM)
  • 使用Android设置的硬件解码

都没有解决问题,远程调试也看不出异常。后面放弃原生VideoPlayer转用播放插件,没有类似问题,目前看起来都挺正常。想来Unity内置的解码在部分机型上水土不服,等其他大佬的解答。
感谢王宇@UWA问答社区提供了回答

A2:H.264 Main Profile 4.1 / No CABAC / 2000Kbps / 720p,我们项目用这个视频格式的配置,基本上没出过问题,但是iOS上有3%左右的闪退率,完全无解。安卓上过滤掉不支持ES 3.0的设备(不播放)之后,反而相当地稳。另外,可以考虑国内大厂经常用的AV Pro插件,或者日本人经常用的CRI Video插件。

感谢郑昊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5cdd24c72b27907cff754b7f


Atlas

Q:图集名是Chapter,但我没有在UWA GOT的Assets下的Texture栏中看到Chapter这个Name。这会是什么原因呢?

A:可能是图集合并没有生效,可以检查一下这个选项。

该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e3c30d9fd2e373ffa7eabd0

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)