当我注意到我的脚本在将内容写入文件的 while 循环中开始时断时续时,就会出现这个问题。我首先检查我的内存,发现当我的 RAM 减少到大约 2-3% 时就会发生这种情况。然后,我查找消耗 RAM 的代码块,并发现随着脚本不断向文件提供内容,它的大小会增加,这也会占用内存。 这是创建文件的代码:
open (my $fh, '>>', $filePath);
while (my $row = $sth->fetchrow_hashref) {
print $fh join ('|', $row->{name}, $row->{address}) "\n";
}
如果我取消注释打印语句并运行脚本,我的 RAM 不会减少。所以,我很确定我的内存 RAM 被 FILEHANDLE/Perl 后面占用内存的其他东西占用了。这让我想到一个问题:是否有办法将文件从 Perl 脚本写入磁盘,而不是使用内存 RAM?
- 我尝试过刷新每一行的 FILEHANDLE,但仍然不起作用。
- 一件非常奇怪的事情是,在我终止脚本后,我查看我的内存,它仍然被文件占用。当我删除这些文件时,它会释放我的内存。我在 Linux 中使用
free
来检查我的内存。
最佳答案
所以你的问题“为什么 Perl 在打印文件时占用我的 RAM?”的答案是 Perl 没有使用内存。操作系统的文件缓存正在使用内存。
您的 Perl 脚本写入了一个大文件。它首先进入 RAM 中的文件缓存,操作系统在有时间或 RAM 耗尽时将其写入磁盘。它不会将其从 RAM 中删除,除非您删除该文件或者它需要 RAM 来做其他事情。
文件缓存并不是一件坏事,您不必担心它有多少使用了您的 RAM。当程序需要更多内存时,操作系统可以非常快速地清除文件缓存并为您的程序重新使用内存。
关于perl - 为什么 Perl 在打印文件时会占用我的内存 (RAM)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968002/