有没有一种方法可以对数组排序而不分配任何内存?

ben*_*blo 5 c# unity-game-engine

我需要非常频繁地对一个较大的集合(上百个/下千个项目)进行排序,即每帧以60 fps的速度(我正在使用Unity)。计算每个项目的密钥有点慢,因此需要将其缓存。

我尝试了各种方法:

  • 具有IComparer的List.Sort(),每次都会计算密钥:超级慢
  • SortedList:速度更快,但是会生成GC分配(30KB /帧):为什么?他们的钥匙盒装了吗(我用了很长时间)?分配的键/值对?如果我将long包装在一个类中,则GC减半,所以我的猜测是“两者”:1个分配给该对,一个分配给该键将值类型装箱...
  • Array.Sort(keyArray,valueArray):太可怕了!缓慢并生成256KB GC /帧!

很遗憾,因为SortedList似乎很适合这项工作,我是否缺少任何无GC的替代方案?

Ant*_*vin 1

如果计算键太慢,您可以将key属性添加到项目类中,在排序之前计算它,然后使用第一个方法来IComparer简单地比较键。