整数与字符串比较的优化有差异吗?游戏高频判断场景性能咨询
性能差异结论
整数比较的性能显著优于字符串比较,这个是底层运行逻辑决定的:
- 整数是CPU原生支持的基本数据类型,一次相等比较只需要单条CPU指令即可完成,耗时在纳秒级别
- 字符串相等比较需要先校验两个字符串的长度是否一致,长度不等直接返回false;长度相等的情况下还需要逐字符遍历比对,直到出现不同字符或全量比对完成,哪怕是短字符串也要走多步比对逻辑,耗时是整数比较的数倍到数十倍不等
针对你的场景的建议
你是每17ms(对应60帧刷新率)就要执行一次全量实例判断,如果Selection类的实例数量较多(超过几十),长期累积的性能差在低配置设备上是可以感知到的,改造的收益很高。
担心可读性下降的问题完全可以用枚举解决,不需要直接用1/2/3这类魔数:
// 这里用C#举例子,你使用的其他编程语言也有对应枚举功能 public enum SelectionType { Upgrade = 1, Siege = 2, Recruit = 3 }
改造后判断逻辑写法是if(s.type == SelectionType.Upgrade),可读性和字符串写法完全一致,还额外避免了字符串拼写错误导致的隐性BUG(比如把"Upgrade"拼成"Upgrad"编译器不会报错,枚举值写错会直接编译不通过)。
你原有需要用到str属性的场景也不受影响:可以给Selection类同时保留str属性初始化赋值,也可以给枚举加扩展方法,根据枚举值返回对应的字符串即可。
权衡参考
如果你的Selection实例每次遍历只有个位数,字符串比较的性能损失可以忽略,你可以维持原有写法。如果实例规模较大,改造的收益远大于额外付出的编码成本。
内容的提问来源于stack exchange,提问作者kralarmerlin
相关产品推荐
相关产品推荐

