3

是否有可能认为将来在 Delphi 中有一个自动垃圾收集器?在许多应用程序中,对何时释放对象的高度详细控制并不那么重要,它只是一件额外需要关心的事情。

对于这样的应用程序,拥有一种像 java 那样工作的垃圾收集器会很有趣。

可以在项目选项中设置。

这可能吗?

注意:我并不是说像这里解释的那样手动创建它,我真正的意思是 Delphi 功能。

换一种说法:是否可以将 FastMM 设置为垃圾收集器?

4

5 回答 5

7

在许多应用程序中,对何时释放对象的高度详细控制并不那么重要,它只是一件额外需要关心的事情。

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

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

将您从销毁每个对象的想法中解放出来并没有太大的好处,何时安全编程您仍然需要考虑销毁每个对象。

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

于 2010-10-21T15:10:15.713 回答
6

垃圾收集在 C 和 C++ 中是可能的,所以我看不出为什么 Delphi 不能也有这样的功能。如果您交叉手指并等待足够长的时间,Delphi 可能会进行垃圾收集。不过,我不认为这是 Embarcadero 的优先事项。

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

于 2010-10-21T15:31:48.667 回答
1

you have both pros and cons with garbage collection i thing delphi is good even without GC(garbage collector). even delphi apps take less memory size than managed .net apps , some times garbage collection also slow down the process because it has to find the unwanted resources , confirm whether they are needed again and delete it.if it needed again it has to load again( app becomes slow) or an error there so delphi is good without GC manually freeing is good for a professional programmer

于 2010-10-21T16:03:22.333 回答
0

带有 RTTI 的 delphi 的最新版本(这也是应用程序规模庞大的一个原因)我认为 rtti(运行时类型信息)可以在未来帮助我们。因为它包含有关正在进行的过程的一些信息,所以我认为将来可能会出现一些类似的功能,例如垃圾收集器,但不确定

于 2010-10-21T15:30:06.223 回答
0

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

于 2010-10-21T15:34:47.927 回答