hprose / hprose-php

Hprose is a cross-language RPC. This project is Hprose 3.0 for PHP
MIT License
1.97k stars 390 forks source link

fix list or map judge error #109

Closed wklzz closed 5 years ago

wklzz commented 5 years ago

值全部为null 随机数组长度:1001 bool(true)

0.54597854614258毫秒 随机数组长度:10001 bool(true)

5.4149627685547毫秒 随机数组长度:100001 bool(true)

53.807973861694毫秒 随机数组长度:1000001 bool(true)

539.38508033752毫秒

值为非null 随机数组长度:1001 bool(true)

0.26702880859375毫秒 随机数组长度:10001 bool(true)

2.6021003723145毫秒 随机数组长度:100001 bool(true)

25.269031524658毫秒 随机数组长度:1000001 bool(true)

251.67989730835毫秒

树莓派3B

andot commented 5 years ago

从严格的角度来说,这个实现应该已经是很棒了,不会有遗漏。但是从实用的角度来说,当元素个数很多时,性能也会随着元素个数的增加而线性的降低。如果能够做到不论元素个数多少,最后的性能都可以控制在 0.02 - 0.05 毫秒以内会不会更好呢?比如如果元素个数不足100个,则循环全部遍历。如果元素超过100个,对前30个遍历,后30个遍历,中间30个遍历,然后对不同位数的下标,只取几个键进行判断,也就是说,当元素个数超过 100 个以后,不论元素个数有多少个,把判断的个数控制在 100 个左右。这样就已经可以足够准确,又足够快了。毕竟当数组元素个数达到这个级别的时候,又能满足上面这些判断条件,还能是联合数组的可能性已经很低很低,在实际应用中,基本上不可能遇到这种情况了。

wklzz commented 5 years ago

老哥,你赢了