手动GC Gen2数据分配
本文关键字:分配 数据 Gen2 GC 手动 | 更新日期: 2023-09-27 18:18:46
在转向c++语法之前,我正在制作一些托管directx游戏引擎的原型。假设我有一些数据(例如一个数组或引用的哈希集)我确信它会在整个应用程序的生命周期中保持活跃。由于性能在这里是至关重要的,我试图避免任何延迟峰值在生成提升,我想问是否有任何方法来初始化一个对象(分配其内存)直接在GC的第2代?我找不到答案,但我很确定我以前见过有人这样做。
或者,既然没有真正需要"管理"那块内存,是否有可能将其分配给非托管代码,但将其作为。net类型公开给其余代码?
不能直接在Gen 2中进行分配。所有分配都发生在第0代或大型对象堆上(如果它们是85000字节或更大)。然而,将某些内容推到第2代很容易:只需将你想要的所有内容分配给第2代并在那时强制执行gc即可。您可以调用GC.GetGeneration
来检查给定对象的生成。
另一件要做的事情是保持一个对象池。也就是说,不是释放对象从而使它们符合GC条件,而是将它们返回到池中。这减少了分配,从而也减少了gc的数量。