unity现在用的mono,比net5/6/7性能差很多(https://github.com/nxrighthere/BurstBenchmarks)

unity2021之后的版本都支持netstandard2.1的api,一些net5/6/7的api都不支持

有用的新API

  1. CollectionMarshal.AsSpan,提供了访问List内部数组span的能力,可以进行各种unsafe操作,避免了一部分开销
  2. CollectionMarshal.GetValueRefOrNullRef,提供了字典快速操作非托管struct的能力,避免更新字典时造成struct拷贝
  3. ThreadPool.UnsafeQueueUserWorkItem,可以接受新的IThreadPoolWorkItem对象,这样可以达成复用,不会创建新的临时对象

unity mono的一些问题

  1. unity2021lts,Array.Sort/List.Sort都有128b的gc alloc,而net6相关api就没有任何内存分配。(这么基础的库都有这种问题,unity真的是。。。

unity mono已经修复的问题

  1. 字典使用enum作为key不再会导致拆装箱

杂项

  1. 通过hack的手段,在unity中支持CollectionsMarshal.AsSpan