Я набросал большой файл, используя File :: Slurp, но учитывая размер файла, я вижу, что он должен быть в памяти дважды, или, возможно, он раздувается, превращаясь в 16-битный юникод.Как я могу лучше всего диагностировать проблему такого рода в Perl?
Размер файла, который я извлек, составляет 800 МБ, и мой процесс Perl, который анализирует, что данные выделяются примерно на 1,6 ГБ во время выполнения.Я понимаю, что могу ошибаться в причинах этой проблемы, но не уверен, что это самый эффективный способ доказать / опровергнуть мою теорию.
Обновление:
Я уничтожилхитрая кодировка символов из списка подозреваемых.Похоже, что я копирую переменную в какой-то момент, я просто не могу понять, где.
Обновление 2:
Я уже сделалЕще одно расследование и обнаружило, что это на самом деле просто получение данных из File :: Slurp, что вызывает проблему.Я просмотрел документацию и обнаружил, что могу заставить ее возвращать scalar_ref, т.е.
my $data = read_file($file, binmode => ':raw', scalar_ref => 1);
Тогда я не получаю инфляцию в моей памяти.Это имеет смысл и является наиболее логичным при получении данных в моей ситуации.
Информация о том, какие переменные существуют и т. Д., В целом полезна, хотя и спасибо.