unity现在用的mono,比net5/6/7性能差很多(https://github.com/nxrighthere/BurstBenchmarks)
unity2021之后的版本都支持netstandard2.1的api,一些net5/6/7的api都不支持
有用的新API
- CollectionMarshal.AsSpan,提供了访问List
内部数组span的能力,可以进行各种unsafe操作,避免了一部分开销 - CollectionMarshal.GetValueRefOrNullRef,提供了字典快速操作非托管struct的能力,避免更新字典时造成struct拷贝
- ThreadPool.UnsafeQueueUserWorkItem,可以接受新的IThreadPoolWorkItem对象,这样可以达成复用,不会创建新的临时对象
unity mono的一些问题
- unity2021lts,Array.Sort/List.Sort都有128b的gc alloc,而net6相关api就没有任何内存分配。(这么基础的库都有这种问题,unity真的是。。。
unity mono已经修复的问题
- 字典使用enum作为key不再会导致拆装箱
杂项
- 通过hack的手段,在unity中支持CollectionsMarshal.AsSpan