我需要非常频繁地对相当大的集合(数百/低数千个项目)进行排序,即每帧以 60 fps 进行排序(我使用的是 Unity)。
计算每个项目的密钥有点慢,因此需要缓存。
我尝试过各种方法:
- List.Sort() 与 IComparer,每次都计算键:超级慢
- SortedList:速度快得多,但会生成 GC 分配(30KB/帧):为什么?它们是用钥匙盒装的吗(我用的是长钥匙)?键/值对是否已分配?如果我将 long 包装在一个类中,GC 就会减半,所以我的猜测是“两者”:1 次分配该对,一次分配用于装箱键(如果它是值类型)...
- Array.Sort(keyArray, valueArray):太可怕了!速度慢且每帧生成 256KB GC!
很遗憾,因为 SortedList 似乎非常适合这项工作,我是否缺少任何无需 GC 的替代方案?
如果计算密钥太慢,您可以添加key
属性到您的项目类,在排序之前计算它,然后使用您的第一个方法IComparer
只是比较密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)