したがって、次のようなクラスに基づくツリーがあります (疑似コード):
class TreeItem {
private TreeItem parent;
private List<TreeItem> leaves;
public void Filter(List<Target> targets) { /* filter given list and pass to all leaves */ }
}
そして、これは GC を文字通り泣かせます - それは時折落ち込み、FPS は 15 まで下がり、約 2.5 メガのゴミをフィルタリングします。
その関数をフレームごとに呼び出しますが、これは避けられないことです。GC.collect
各フレーム/各フレームを呼び出したくありませんN
。
子に渡すリストは、最後に LINQ 式を介して生成.ToList()
されます (フィルター処理された IEnumerator (元のコレクションの一部へのリンクを意味します) を渡すと、パフォーマンスがさらに低下します)。
このFilter
関数では、特定のコレクションを変更しません。フィルターするだけです。
だから私の質問は: 少なくとも同じフィルタリング パフォーマンスを維持し、GC が fps を落とすのを取り除く方法は?