【发布时间】:2011-06-15 06:59:48
【问题描述】:
在大多数编程语言中,处理文件的流程是开放-使用-关闭,这是众所周知的。然而,我在 ruby 代码中多次看到无与伦比的 File.open 调用,而且我在 ruby 文档中找到了this gem of knowledge:
I/O 流在被垃圾收集器声明时会自动关闭。
darkredandyellow 友好的 irc 处理这个问题:
[17:12] 是的,而且文件描述符的数量通常受操作系统限制
[17:29] 我假设你可以很容易地用完可用的文件描述符之前垃圾收集器清理。在这种情况下,您可能希望自己使用关闭它们。 “被垃圾收集器认领。”意味着 GC 在未来的某个时间点起作用。而且很贵。显式关闭文件的原因很多。
- 我们是否需要明确关闭
- 如果是,那么为什么 GC 会自动关闭?
- 如果不是,那为什么选择这个选项?
【问题讨论】:
-
自析构函数被发明以来,你的“常识”已经过时了。
-
@meager: 析构函数是什么时候发明的?
-
请注意:虽然文件描述符是有限的,但至少在 Linux 上,限制是相当高的。
-
@Linuxios :在我的 ubuntu12.04
$ ulimit -n => 1024上,只有当你做一些简单的工作时它才会很高。坏习惯终有一天会出大问题!