在提供巨大的文件数据作为参数时,我收到了内存不足的问题。我检查了内存大小,它有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.
答案 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
或类似内容