在Perl中逐行读取文件时,我是否应该积极地释放内存?

ssn*_*ssn 2 perl memory-management micro-optimization

我是否应该逐行读取文件时积极释放内存?一个例子:

while (<FILE>) {
  my $line = $_;
  <process line>
  undef($line);
}
Run Code Online (Sandbox Code Playgroud)

"Undefing"$ line变量是减少内存消耗的好选择吗?

Mic*_*man 11

请参阅perlfaq3,了解更多关于Perl中内存使用情况应该(而且不应该)的内容.


Nat*_*C-K 9

这应该没有区别,因为一旦下一个循环迭代开始,变量将被释放,无论你是否显式地取消它.

  • 不太正确; 变量的字符串缓冲区将保持分配状态,并在下一次迭代时重用(或扩展,如果需要),如果它没有取消.大多数情况下,这将大大减少分配内存所花费的时间. (7认同)
  • 这是错误的.(ysth很温柔.)lexical(`my`)变量使用的内存在程序结束前不会释放.不过,它将在它的块内重用.在全局变量上使用`undef`可以允许内存在程序的其他部分重用,但除非你有大型全局数据存储,否则可能不值得.通常,分配给程序的内存不能返回给OS. (3认同)

Sch*_*ern 5

不会.除非文件中的行长度大不相同,其中一些长度很大(10兆字节以上),为什么还要担心呢?

有证据表明循环消耗了太多内存吗?