有没有一种常见的做法如何在.NET中更容易为垃圾收集器释放内存?

Mar*_*cka 1 .net wpf garbage-collection managed-code

我一直在想如果有一种方法可以加速释放.NET中的内存.我正在用.NET创建一个游戏(只有托管代码),不需要重要的图形,但我仍然想要正确编写它,以免失去性能.

例如,为不再需要的对象分配空值是否有用?我在互联网上的一些样本中看到了这一点.

Joe*_*orn 6

将null值赋给不再需要的对象是否有用?

一般来说,没有.您在网上看到的大多数样本都来自VB6的.Net,这是一种常见的最佳实践.在.Net中,它没那么有用.如果你有一个非常长的运行方法,它可能让垃圾收集器稍早找到对象 - 但如果你的方法那么长,你有其他问题.

相反,在.Net中,您应该构建简短的方法,并尽可能在尽可能小的范围块中定义变量.使用由范围确定的变量的"自然"生命周期,但保持自然生命周期短.

应该进行自己的垃圾收集,至少有一个其他答案在这里建议.这实际上可以使事情变得更慢..Net使用世代垃圾收集器.通过强制垃圾收集,您可能会收集目标对象(您也可能没有 - 垃圾收集没有保证).但是你也可能会迫使一些你无法收集的其他物品被存储在更高阶的生成中,这使得它们在将来更难收集.所以就是不要这样做.