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

标签 perl memory-management

当我注意到我的脚本在将内容写入文件的 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 来检查我的内存。

Am I checking my memory usage at the right place here ?

最佳答案

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

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

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

关于perl - 为什么 Perl 在打印文件时会占用我的内存 (RAM)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968002/

相关文章:

windows - 如何在 Windows 机器上的 perl 脚本中将 Unicode 文件转换为 ASCII 文件

perl - 试图找出是否有更短/更好的方法来实现类似条件和的函数

c++ - 如何为类 union 类编写析构函数

android - 针对 Android 优化 Canny 边缘检测器

c++ - imread 命令后 OpenCV 矩阵内存释放

regex - perl 获取嵌套函数和参数(text::balanced 或普通 perl)

perl - Perl 中的散列和散列引用有什么区别?

Perl 脚本在第一次运行时无法打开文件进行写入,但在第二次运行时成功

c# - WPF内存问题

iphone - 超过150张图像的ScrollView崩溃