Html 我是否在erb中发现内存泄漏,或者我是否遗漏了一些重要的内容?请告知

Html 我是否在erb中发现内存泄漏,或者我是否遗漏了一些重要的内容?请告知,html,ruby,memory,erb,Html,Ruby,Memory,Erb,请帮助我理解为什么这个看似简单的erb渲染循环的内存会永远增长 “alltext.erb”是一个基本的文本文件,看起来像这样: <% 5000000.times do %> spam <% end %> 我希望将所有变量设置为nil并强制垃圾收集,以及超出范围(继续进行永久循环的下一次迭代)将释放一些内存。请帮助我理解我在这里遗漏了什么 我的ruby版本是1.9.2-p180。 我在OSX上,但这是一个复制当前Ubuntu服务器上观察到的行为的测试用例。正如ayck

请帮助我理解为什么这个看似简单的erb渲染循环的内存会永远增长

“alltext.erb”是一个基本的文本文件,看起来像这样:

<% 5000000.times do %>
  spam
<% end %>
我希望将所有变量设置为nil并强制垃圾收集,以及超出范围(继续进行永久循环的下一次迭代)将释放一些内存。请帮助我理解我在这里遗漏了什么

我的ruby版本是1.9.2-p180。
我在OSX上,但这是一个复制当前Ubuntu服务器上观察到的行为的测试用例。

正如ayckoster所建议的,“您正在创建文件,并且从不关闭它们”。使用:

而不是:

file_contents = File.new(filename).read

您正在创建文件,但从未关闭它们。这适用于smalls脚本,但如果您创建无限多个脚本,则不起作用。我更新了代码以反映这一建议,但不会影响内存泄漏。谢谢。如果不删除
renderer=nil
,我就无法让它运行多个迭代。当我这么做的时候,它会运行,但不会在MRI 1.9.3-p125中泄漏。等等。。。在第一次迭代后,您没有访问渲染器的权限。。。当它变为零时,我们遇到了完全相同的问题:erb文件中的一个非常简单的循环会使内存无限增长:Ruby 1.8.7-p370,Rails 2.3.11(我知道-它很旧,不要怪我)。感谢您的输入。我尝试过这种调整,但没有效果。我还尝试将文件声明排除在循环之外(这也是无效的)。澄清一下,这个过程似乎在记忆中增长了一段时间,然后结束。例如,当垃圾邮件重复5000000次时,此测试循环的上限约为670MB。我想知道,即使循环之间不应该保留对象/引用,这怎么会发生。
file_contents = File.read(filename)
file_contents = File.new(filename).read