【发布时间】:2010-04-26 18:33:36
【问题描述】:
好的,这就是交易。 有些人将生命交给 .NET 的垃圾收集器,有些人根本不相信它。
我是部分信任它的人之一,只要它不是非常关键的性能(我知道我知道.. 性能关键 + .net 不是最喜欢的组合),在这种情况下,我更喜欢手动处理我的对象和资源。
我要问的是,是否有任何事实表明垃圾收集器在性能方面的效率到底有多高?
请不要分享任何个人意见或基于经验的可能假设,我想要公正的事实。我也不想要任何赞成/反对的讨论,因为它不会回答问题。
谢谢
编辑:为了澄清,我基本上是在说:无论我们编写什么应用程序,资源是否关键,我们是否可以忘记一切并让 GC 处理它,还是不能?
我试图在现实中得到一个答案,即 GC 做什么和不做什么,以及如果存在这种情况,手动内存管理会成功的地方可能会失败。它有限制吗?我不知道我该如何进一步解释我的问题。
我对任何应用程序都没有任何问题,这是一个理论问题。
【问题讨论】:
-
定义高效。在不知道如何衡量其效率的情况下,很难回答这个问题。
-
好吧,如果可能的话尽量避开亲戚,或者如果必须的话,将其与完美的手动内存管理进行比较。
-
如果您正在寻找一些公正的事实,为什么不自己设置一些测试呢?运行一些创建和手动销毁,然后再次运行相同的程序而不处理任何东西并让 GC 拾取它?如果您想要数字,而轶事证据不适合您,请自行设置测试以获取数字。
-
我认为您应该始终妥善处理您的物品。你的问题是从你的代码中调用 GC.Collect 与让 .net 为你做这件事对性能有何影响?
-
@Jonas:比较它在什么基础上?通常重要的不是分配/释放内存所花费的总时间,而是何时分配/释放 - 现代垃圾收集器是并发的,这意味着它们最终可能会做更多的工作,但会做很多事情速度更快,并且在您甚至没有注意到影响的“空闲”时间。这算效率更高还是更低?