关于script:厚积薄发LuaJIT性能热点函数优化

51次阅读

共计 2473 个字符,预计需要花费 7 分钟才能阅读完成。

1)LuaJIT 性能热点函数优化
​2)Unity 2019.4 打包 Android 疑难
3)RenderTexture.GetTemporary 报错问题
4)WaitForTargetFPS 耗时太高
5)ParticleSystem.Main 的有效性


这是第 214 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

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

Script

Q:征询我的项目中的这个函数耗时十分重大,有什么优化的办法吗?

A1:这个是 table.get,对应获取字段或者拜访数组时调用的函数:

  1. 优先应用间断数组而不是英文名字段,能够显著晋升拜访效率并升高内存耗费,很多团队喜爱应用 Class 的写法,能够这样革新:
    local obj = ClassA.New()
    obj.abc = 1
    obj.cde = “test”
    变成:
    local obj = ClassA.New()
    obj[1] = 1
    obj[2] = “test”
    这个办法能够针对应用频率较高的代码进行革新。
  2. 本人开发工具,在编译 Lua 之前,将 Lua 代码中的常量从英文名变量转换为数值,这个能够联合 1 应用,就能够在开发期写英文名字段名,而后编译时转换为数组。

感激招文勇 @UWA 问答社区提供了答复

A2:字符串应该是哈希值计算的耗费,这样的开销应该是很频繁地调用了。

感激王欢 @UWA 问答社区提供了答复

A3:批准你的观点,但可读性变差了,得失相当。第二点,可能比拟容易出错。

感激 Robot.Huang@UWA 问答社区提供了答复

Build

Q:Unity 版本由 2018.4.0f1 降级到 2019.4.5f1,其中 Android 的 Custom Manifest、Custom Gradle Template 都拆分为了两个,别离为 Main 和 Launcher。之前对接的各个 Android SDK 感觉须要从新做了。请问有比拟相熟的,能够指导一下这里吗?

咱们之前各个 SDK 都是以 JAR 和 AAR 的模式间接放在 Unity 工程内,间接 Unity 出包,当初间接 Build 会有各种报错,感觉是不兼容之前的格局了。

A1:咱们也遇到了内部编译的 AAR 内的 Manifest 和 Unity 内的 Manifest 抵触问题。因为 2019 其实是能够间接编译 Java 的,咱们罗唆勾销了内部工程,间接把 Java 代码和 OC 的代码放入 Unity 工程,而后只应用 Unity 内的 Manifest,就没有抵触谬误了。

咱们我的项目是 2017 的,过后记得 MM 能够,然而 Java 不行。起初用 2018 开的其余我的项目因为临时没遇到相似需要,就没试,最近另外一个我的项目间接 2019 来做就这样对应了。

感激黄程 @UWA 问答社区提供了答复

A2:找了找文档 https://forum.unity.com/threads/using-unity-as-a-library-in-native-ios-android-apps.685195,咱们是手动把原来一个 Manifest 文件的内容给拆了一下,LauncherManifest 只放图标和 App Name 相干的设置。

之后有工夫也筹备试试黄程大佬的办法。

感激题主张斌 @UWA 问答社区提供了答复

Script

Q:应用 GetTemporary 这个办法进行图片资源的创立时,产生了这个谬误:ArgumentException: RenderTextureDesc width must be greater than zero.

望各位赐教。请问这部分源代码在哪里能够看到?

A:源代码:
https://github.com/Unity-Technologies/UnityCsReference

参数 Width 不能小于等于 0。

感激羽飞 @UWA 问答社区提供了答复

Script

Q:应用 GPM 查看我的项目性能,发现 WaitForTargetFPS 耗时太高,均值在 20ms 左右。网上查找说是因为开了垂直同步的问题,依照网上的解决形式从新打包过后,并没什么成果。

A1:在真机上,如果 Application.targetFrameRate = -1 还是会主动与屏幕的刷新率同步,想把这个“耗费”降下来,就设置成 144。

其实这个只是 CPU 在期待屏幕刷新,有这个“耗费”其实是坏事,阐明 CPU 和 GPU 的负载不高,发热不厉害。

感激张首峰 @UWA 问答社区提供了答复

A2:你能够看看 Unity 官网文档上对于 WaitForTargetFPS 的解释。

https://docs.unity.cn/cn/2019.4/Manual/ProfilerCPU.html#samples-rendering

感激 tyer@UWA 问答社区提供了答复

Script

Q:Main 为 Struct 值类型的只读属性,在不从新设置回对象字段的状况下批改无效。请问各位大佬,在运行时进行属性批改操作时,这种机制的底层实现原理是什么?

A1:能够参考《Particle System Modules – FAQ》

感激 jim@UWA 问答社区提供了答复

A2:集体了解是,这个是一个包 Property 的构造体。每个 Property 的 Get 和 Set 又指向的外部子模块的参数。

所以操作这些 Property 就间接操作到了外部的子模块。

感激欧月松 @UWA 问答社区提供了答复

A3:MainModule 这个构造体就是一个对 Native 接口的封装。

感激羽飞 @UWA 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com

官网技术 QQ 群:793972859(原群已满员)

正文完
 0