加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么Perl会在打印文件时占用我的内存(RAM)?

发布时间:2020-12-15 21:45:52 所属栏目:大数据 来源:网络整理
导读:当我注意到我的脚本在将内容写入文件的while循环中开始暂停时,就会出现这个问题.我首先检查一下我的记忆,看看当我的RAM下降到2-3%时会发生这种情况.然后,我寻找消耗RAM的代码块,并认为当脚本继续向文件提供内容时,它的大小也会增加,这也会占用内存. 以下是
当我注意到我的脚本在将内容写入文件的while循环中开始暂停时,就会出现这个问题.我首先检查一下我的记忆,看看当我的RAM下降到2-3%时会发生这种情况.然后,我寻找消耗RAM的代码块,并认为当脚本继续向文件提供内容时,它的大小也会增加,这也会占用内存.
以下是执行文件创建的代码:
open (my $fh,'>>',$filePath);
while (my $row = $sth->fetchrow_hashref) {
    print $fh join ('|',$row->{name},$row->{address}) "n";
}

如果我取消注释print语句并运行脚本,我的RAM将不会减少.所以,我很确定我的内存RAM是由FILEHANDLE / Perl背后的其他内容占用了内存.这引出了一个问题,如果有办法将文件从Perl脚本写入磁盘,而不是使用内存RAM?

>我试过在每一行上冲洗FILEHANDLE,但它仍然无效.
>有一点也很奇怪的是,在我终止我的脚本之后,我会查看我的内存并且它仍然被文件占用.当我删除文件时,它释放了我的记忆.我在linux中使用free来检查我的记忆.

解决方法

所以问题的答案“为什么Perl在打印文件时会占用我的RAM?”是Perl没有使用内存.操作系统的文件缓存正在使用内存.

您的Perl脚本编写了一个大文件.它首先进入RAM中的文件缓存,操作系统在有时间或RAM耗尽时将其写入磁盘.它不会将其从RAM中删除,除非您删除该文件或它需要RAM其他内容.

文件缓存并不是一件坏事,您不必担心它有多少使用您的RAM.当程序需要更多内存时,操作系统可以非常快速地清除文件缓存并为程序重用内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读