Delphi自动垃圾收集器

时间:2010-10-21 14:48:08

标签: delphi garbage-collection fastmm

是否可以考虑将来在Delphi中使用自动垃圾收集器?在许多应用程序中,对何时释放对象进行高度详细的控制并不是那么重要,而且只是需要关注的一件事。

对于这种具有类似java的垃圾收集器的应用程序,它会很有趣。

可以在项目选项中设置。

这可能与否?

注意:我不是故意像解释here那样手动创建它,我的意思是Delphi功能。

以另一种方式陈述:是否可以将FastMM设置为垃圾收集器?

5 个答案:

答案 0 :(得分:7)

  

在许多应用程序中,对何时释放对象进行高度详细的控制并不是那么重要,而且只是需要关注的一件事。

我相信几乎没有这样的应用程序。大多数时候,您认为您不需要控制对象何时被销毁,您可能会引入错误。

现在,确实存在某些对象可以被安全地忽略以便稍后由自动收集器处理的情况。但请记住,您需要仔细考虑您计划的每个对象,而不是手动销毁。如果有一些锁怎么办?如果它有一些文件打开,可能是在共享拒绝模式下会怎么样?

让你免于考虑摧毁每一个物体没有多大好处,何时安全编程你还需要考虑摧毁每一个物体。

垃圾收集器的目的不是让程序员免于看到这些东西。这是为了节省引用计数和尝试/最终调用。

答案 1 :(得分:5)

Garbage collection is possible in C and C++,所以我认为德尔福没有理由不能拥有这样的功能。如果你交叉手指并等待足够长的时间,Delphi可能会收集垃圾。不过,我不认为这是Embarcadero的优先考虑事项。

您无法将FastMM设置为垃圾回收器,因为FastMM不进行垃圾回收,因此无需设置任何内容。 Delphi假设的未来垃圾收集功能可能需要与内存管理器配合,所以如果这样的功能存在,并且当时FastMM仍然是内存管理器,那么FastMM可能会获得一些设置。

答案 2 :(得分:1)

你有垃圾收集的利弊我甚至没有GC(垃圾收集器)的东西delphi是好的。甚至delphi应用程序占用的内存大小也比托管的.net应用程序少,有时候垃圾收集也会减慢进程的速度,因为它必须找到不需要的资源,确认是否需要再次使用它们并删除它。如果再次需要,它必须再次加载(app变慢)或者出现错误所以delphi很好没有GC手动释放对专业程序员有好处

答案 3 :(得分:0)

持续使用RTTI的delphi版本(这也是应用程序规模很大的原因) 我认为rtti(运行时类型信息)可以在将来帮助我们。因为它掌握了有关正在进行的过程的一些信息所以我认为将来可能会有一些像垃圾收集器这样的类似功能,但不确定

答案 4 :(得分:0)

但是针对dot net 2007和其他旧的delphi dot net的delphi有垃圾收集器+ vcl但现在已弃用(垃圾收集器也不能100%正常工作)