NativeCollection的源代码太难嚼了,我简单理解为他是一个性能爆炸的容器库。
常用集合的0gc高性能非托管库
在看TimerComponent的时候,发现timeId用了NativeCollection.MultiMap,而其他的,还是普通的容器。
为什么不全用非托管库呢?
什么时候该用这个非托管库呢?
ETNewBee 先了解下c# unmanaged 的定义 也就是非托管类型 只要是非托管类型的容器 都可以用这个 不用考虑gc和性能问题
susices
如果某个类型是以下类型之一,则它是非托管类型 :
sbyte、byte、short、ushort、int、uint、long、ulong、nint、nuint、char、float、double、decimal 或 bool
sbyte
byte
short
ushort
int
uint
long
ulong
nint
nuint
char
float
double
decimal
bool
任何枚举类型
任何指针类型
任何仅包含非托管类型字段的用户定义的结构类型。
也就是说
public readonly Queue<long> timeOutTime = new();
public readonly Queue<long> timeOutTimerIds = new();
也是可以用NativeCollection.Queue咯?
为啥不用呢?
ETNewBee 可以用 之前et的multimap 每次遍历都有gc 比较刚需 其他地方 随意了 没性能瓶颈