[开发者心得] 常用代码中的可能会造成高性能消耗的代码与优化

[复制链接]
1114 |3
感情偏食BZ8 发表于 2023-8-24 14:19:58 | 显示全部楼层 |阅读模式
本帖最后由 感情偏食BZ8 于 2023-8-24 14:19 编辑

1.过多的动态内存分配: 频繁地使用 new 创建对象和数组会导致大量的垃圾回收,影响性能。尽量使用对象池或者复用对象来减少内存分配。特别是当在update中去new或是定义一个属性都是比较耗性能的。


image.png

像这个样子。如果确实有这个需要我们可以使用对象池优化一下。
image.png

2.大量的重复计算: 如果在循环中进行大量的重复计算,会增加 CPU 负载。尽量将重复计算提取到循环外部,避免重复计算。
例如:当你的人物攻击时得到了一大堆相同的攻击目标。这个时候我们可以将计算伤害的工作尽量的减少。


//直接进行计算

calculateDamage(): number {
        const baseDamage = 10;
        const strengthModifier = this.strength * 0.5;
        const agilityModifier = this.agility * 0.2;
        const intelligenceModifier = this.intelligence * 0.1;

        return baseDamage + strengthModifier + agilityModifier + intelligenceModifier;
    }

//------优化之后---------
//属性变化时进行计算
updateModifiers() {
        this.strengthModifier = this.strength * 0.5;
        this.agilityModifier = this.agility * 0.2;
        this.intelligenceModifier = this.intelligence * 0.1;
    }
//需要给伤害时直接给出
    calculateDamage(): number {
        const baseDamage = 10;
        return baseDamage + this.strengthModifier + this.agilityModifier + this.intelligenceModifier;
    }




3.多个的update: 在一些合并使用一个update的情况下可以避免一些不必要的性能消耗:
例如:在一个商店的中有多个物品,每一个物品的购买要求有一个cd,我们可以让每一个UI自己本身在update中去计算自身的CD,也可以将其放在商店的mainUI统一管理执行。后者就可以避免你多个item的update执行。
image.png
上面这种情况下就会有多个onUpdate被执行,而下面的情况下只有一个onUpdate被执行
image.png



4.-----非代码----不合理的触发器
可以看看这篇文章
触发器的原理与性能消耗




回复

使用道具 举报

哭唧唧的细狗 发表于 2023-8-24 14:33:43 | 显示全部楼层
请教大大,垃圾回收是如何影响性能的呢,频繁的回收会造成内存碎片么,这样又会有什么问题呢
回复

使用道具 举报

感情偏食BZ8楼主 发表于 2023-8-24 18:09:50 | 显示全部楼层
哭唧唧的细狗 发表于 2023-8-24 14:33
请教大大,垃圾回收是如何影响性能的呢,频繁的回收会造成内存碎片么,这样又会有什么问题呢 ...

垃圾回收本身需要执行一些额外的操作,如遍历标记回收对象等。这些操作会占用CPU资源,导致应用程序的性能下降。尤其是在频繁执行垃圾回收的情况下,可能会产生明显的性能开销。然后频繁的回收造成内存碎片可能会造成大块内存的分配失败降低内存利用效率,就有可能造成性能问题。
回复

使用道具 举报

哭唧唧的细狗 发表于 2023-8-24 18:20:44 | 显示全部楼层
感情偏食BZ8 发表于 2023-8-24 18:09
垃圾回收本身需要执行一些额外的操作,如遍历标记回收对象等。这些操作会占用CPU资源,导致应用程序的性 ...

好的,谢谢分享
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表