Этот вопрос возникает, когда я замечаю, что мой скрипт начинает останавливаться и останавливаться, когда он в цикле записи содержимого в файл. Сначала я проверяю свою память и вижу тенденцию, что это происходит, когда моя операционная система уменьшилась примерно до 2-3%. Затем я просматриваю свой блок кода, который потребляет ОЗУ, и полагал, что по мере того, как скрипт продолжает подавать контент в файл, он растет в размере, который также занимает память. Вот код, который делает создание файла:Почему Perl занимает мою память (ОЗУ) при печати файла?
open (my $fh, '>>', $filePath);
while (my $row = $sth->fetchrow_hashref) {
print $fh join ('|', $row->{name}, $row->{address}) "\n";
}
Если я раскомментируйте оператор печати и запустить скрипт, моя память не будет уменьшаться. Итак, я уверен, что память RAM занята FILEHANDLE/что-то еще за Perl, которое занимает память. Это приводит меня к вопросу, если есть способ написать файл из Perl-скрипта на диск, вместо использования RAM памяти?
- Я попытался промыть FILEHANDLE на каждом ряду, и он все еще не работает.
- Одна вещь, которая также очень странная, заключается в том, что после того, как я завершаю свой скрипт, я смотрю на свою память и все еще берусь за файлы. И когда я удаляю файлы, он освобождает мою память. Я использую
free
в linux, чтобы проверить свою память.
Можете ли вы обновить свой вопрос с помощью сценария? Он должен работать. – choroba
Это может быть [дубликат] (http://stackoverflow.com/questions/1242832/in-perl-how-can-i-release-memory-to-the-operating-system), но я действительно не понять вопрос. – mob
Отредактировал мой вопрос, чтобы добавить более подробную информацию по этому вопросу. Надеюсь, это объяснит проблему намного яснее. – kelvien