所以我们有一个基于这样的类的树(伪代码):
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?