尽管我确实理解使用此功能的严重影响(或者至少我是这么认为的),但我不明白为什么它会成为受人尊敬的程序员永远不会使用的东西之一,即使是那些甚至不知道的人它是干什么用的。
假设我正在开发一个应用程序,其中内存使用量根据用户的操作而变化很大。应用程序生命周期可以分为两个主要阶段:编辑和实时处理。在编辑阶段,假设创建了数十亿甚至数万亿个对象;其中有些很小,有些没有,有些可能有终结器,有些可能没有,假设它们的生命周期从几毫秒到几小时不等。接下来,用户决定切换到实时阶段。在这一点上,假设性能起着根本性的作用,并且程序流程中最轻微的改变都可能带来灾难性的后果。然后通过使用对象池等将对象创建减少到最低限度,但随后,GC 意外地插入并将其全部丢弃,并且有人死了。
问题:在这种情况下,在进入第二阶段之前调用 GC.Collect() 不是明智的吗?
毕竟,这两个阶段永远不会在时间上相互重叠,GC 可能收集的所有优化和统计信息在这里用处不大......
注意:正如你们中的一些人所指出的,.NET 可能不是这样的应用程序的最佳平台,但这超出了这个问题的范围。目的是澄清 GC.Collect() 调用是否可以改善应用程序的整体行为/性能。我们都同意你会做这样的事情的情况非常罕见,但话又说回来,GC 试图猜测并且大部分时间都做得很好,但它仍然是猜测。
谢谢。