繁体   English   中英

手动GC Gen2数据分配

[英]Manual GC Gen2 data allocation

在转向c ++语法恐怖之前,我正在对一些托管Directx游戏引擎进行原型设计。 因此,假设我有一些数据(例如数组或引用的哈希集),我确信它会在整个应用程序的生命周期中保持有效。 由于性能在这里至关重要,并且我正努力避免在代升级方面出现任何滞后峰值,因此我想问一问是否有任何方法可以在GC的第二代中直接初始化对象(分配其内存)? 我找不到答案,但是我可以肯定我以前见过有人这样做。

或者,由于实际上不需要“管理”该内存,是否可以使用非托管代码分配它,而是将其作为.NET类型公开给其余代码?

您不能直接在Gen 2中进行分配。所有分配都在Gen 0或大型对象堆中进行(如果它们是85000字节或更大)。 但是,将某些东西推到Gen 2很容易:只需分配您想要进入Gen 2的所有内容,然后在此时强制GC。 您可以调用GC.GetGeneration来检查给定对象的生成。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM