对于少数工作,内存问题随机发生

时间:2015-02-24 12:38:05

标签: perl perl-module perl-data-structures

在提供巨大的文件数据作为参数时,我收到了内存不足的问题。我检查了内存大小,它有2045 MB的可用空间。是否足以让交换空间对哈希ref值中的记录进行排序。请告诉我可以做哪些检查。


感谢您的解释。

我正在使用下面的哈希模块。

 my ($href, @list);
$href = $self->{set}{$ret}         if ($scope eq 'set');
$href = $self->{done}{$ret}      if ($scope eq 'done');

foreach (sort keys %$href) {
  push @list, $href->{$_};
  }

return @list;

Its is reading from the oracle table.

1 个答案:

答案 0 :(得分:2)

目前,你的问题相当广泛,所以很难给出一个可靠的答案。但最大的问题是 - 你用你的大数据文件做什么。如果您将其加载到内存中,那么它已经消失了。

最大的问题是访问列表上下文中的文件句柄,例如foreach或将其指定为数组。

e.g:

foreach ( <$filehandle> ) {

my @stuff = <$filehandle>;

因为这两个操作都会导致文件被读入内存进行处理,其中:

while ( <$filehandle> ) {

my $stuff_line = <$filehandle>; 

赢得&#39;吨。

如果你正在使用哈希,你可以打印&#39;它在标量语境中,揭示它有多大。

print scalar %hash;

这会告诉你它有多大。

变量范围也可能是一个因素 - 全球范围变量&#39;徘徊在&#39;如果你不小心,那么perl就不会整理。 Perl本身通常会管理它自己的内存使用量,并且可以自由地回收&#39;在内部空间,所以一个大数字 意味着存在问题。

如果您想了解更多细节,可能需要查看Devel::Size或类似内容