Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Tie::File


Автор: Aleshka 19.12.2007, 09:20
Добрый день!
Решил для создания скрипта использовать модуль Tie::File, для того чтобы представить файл в виде массива. 
Код

use Tie::File;

my $file = "/home/alter/script/mpd.log";
tie @lines, 'Tie::File', $file or die "Can't open the $file";
foreach $line (@lines) {
print "$line\n";
}

Но заметил то что при выполнении данного кода происходит загрузка процессора до 50% и потребления памяти до 20 Мб. При этом хотелось бы отметить что файл занимает всего 4 Мб. А что будет если файл увеличится до 20 Мб??? Я посмотрел можно ограничить размер выделяемой памяти. но как мне увеличить быстродействие выполенения данного скрипта не знаю. 

Автор: amg 19.12.2007, 11:10
Так ли нужно для анализа лога загружать в массив весь файл? Обычно в логах далеко отстоящие строки друг с другом не связаны.

Автор: Aleshka 19.12.2007, 13:06
Цитата

Так ли нужно для анализа лога загружать в массив весь файл? 

amg вы абсолютон правы, не нужно анализировать весь лог. Но мне интересно было посмотреть на этот модуль как он работает  и в его описании указано что в данном случае массив в память не заносится.   Но быстродействия уж очень хромает, по крайне мере в моем случае.

Автор: amg 19.12.2007, 13:28
Tie::File, как я понимаю, нужен когда файл в виде массива не помещается в память, и необходим быстрый доступ к произвольным строкам файла. По нынешним временам 20 или даже 200 Мб файл спокойно можно поместить в обыкновенный массив.

Автор: Aleshka 21.12.2007, 11:25
Да можно поместить в массив и 200 Мб, но это мне кажется будет не лучший вариант решения. Хотя, каждому свое! Но мне как начинающему инетересно рассмотреть и другие варианты решения. 

Автор: tishaishii 19.1.2008, 14:48
СУБД

Автор: vadiml 20.1.2008, 12:11
я много-мегабайтные файлы прохожу простым считыванием
open FL "file";
while my $str (<FL>) {
просмотр строки
}
close FL;
работает очень быстро, при том что разбор строк бывает очень сложный.
При последовательном движении по файлу загонять весь файл в массив не надо, обычно в памяти хранится массив с окончательными данными, да и то если их нельзя сразу же направить на вывод в другой файл.
обычно при такой обработке у меня загрузка на cpu 100%, но памяти потребляет немного

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)