CSharp重写对象池
编者注 由于在Unity当中,需要申请大量的struct和object。这两个东西在CSharp当中并不统一。导致申请的东西很多,CSharp的GC调用,会导致Unity发生Stop world现象。这个将会让Unity帧速率降低,从而影响用户体验。需要自己找或者写对象池。编者了解Java,更倾向从Java当中抄一部分作为接口与实现。 需求 .Net Standard 2.0标准API实现线程安全的struct及object的池。 调研 Unity 原生 通过Google并没有查找到Unity原生的对象池,看来Unity的原生对象,官方并不提供管理。 Standard 2.0 先到附录3尝试获取信息,发现 .Net core 具有所需要的ArrayPool,但是在 .Net Standard 2.0 搜索并未发现该内容。 Microsoft简单对象池 通过附录4,微软通过ConcurrentBag创建的一个简单的对象池。虽然微软写的是Object但是,通过ConcurrentBag源代码查看到范型T并未规定为class,能够作为实施备选。并且ConcurrentBag解决了多线程访问。 ASPNet/Extensions/ObjectPool .NET Extensions 能够看到很多的类库。其中就有编者所关注的ObjectPool。通过载入Rider