簡體   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