手动GC Gen2数据分配

时间:2014-08-18 22:01:56

标签: c# memory-management garbage-collection dynamic-memory-allocation

在转向c ++语法恐怖之前,我正在对一些托管的directx游戏引擎进行原型设计。 所以,让我们说我已经获得了一些数据(例如数组或引用的哈希集),我确信它会在整个应用程序的生命中保持活力。由于性能在这里至关重要,并且我试图避免生成促销的任何延迟峰值,我想询问是否有任何方法可以直接在GC中初始化对象(分配其内存) #39;第二代?我无法找到答案,但我很确定我之前见过有人这样做过。

或者,因为没有真正需要"管理"那段内存,是否可以使用非托管代码进行分配,但是将其作为.NET类型公开给其余代码?

1 个答案:

答案 0 :(得分:3)

您无法直接在Gen 2中分配。所有分配都发生在Gen 0或大对象堆上(如果它们是85000字节或更大)。然而,向Gen 2推送一些东西很简单:只需将你想要的所有内容分配给Gen 2并在那时强制使用GC。您可以调用GC.GetGeneration来检查给定对象的生成。

另一件事是保留一个对象池。即而不是释放对象,从而使它们符合GC的条件,您将它们返回到池中。这减少了分配,从而减少了GC的数量。