Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Оптимизация кода (медленно выполнение при болишх объемах файлов)  (Прочитано 5589 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
perl6
Помогающий

ru
Offline Offline

« : 29-08-2018 22:31 » 

Приветствую, есть код

Код: (Perl)
#!/usr/bin/perl -w

open(IP,"<ip.log") or die "Openning file: " . $!;
@ip=<IP>;
chomp(@ip);
close(IP);

open(LP,"<login_pass.log") or die "Openning file: " . $!;
@lp=<LP>;
chomp(@lp);
close(LP);


for $lp(@lp)
{
    for $ip(@ip)
  {
     if ($lp =~ /$ip/) { push (@dat, $lp)}
  }    
}

open (F, ">> good.log");

print F join( "\n", @dat );



Что он делает, а он сравнивает в файле login_pass строку с ip, если находит соотв, то добавляет ее в массив и потом пишет весь массив в файл. Так вот, при размерах файла ip примерно в 5к строк, скрипт отрабатывает порядка 10 минут. Нельзя ли как-то ускорить его работу, какие будут идеи?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 29-08-2018 22:44 » 

Еще бы N*M будет тормозить быстро тормозить с ростом объемов. Если все плохо и тормозит, то либо ты не то делаешь, либо не тем инструментом.
Для начала рассмотри свойства входных данных. Например, можно ли поменять метод сравнения с регулярки на равенство всей строки или хотя бы отдельного слова. Это позволит построить хеш по ip и искать в нем с постоянной сложностью.
Если решения не найдется, всегда можно переписать на более низкоуровневом языке, например С или С++, прибавка x5 гарантирована. Хотя, в случае регулярки может и не быть. Подумай еще раз, точно ли она тут нужна. Простые вхождения проверять регуляркой излишне.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 30-08-2018 12:39 » 

5к - это не объем

Включи время одной проверки..
на локалке поиск по файлам (около 100к)  10 мин  очень много, а здесь поиск в памяти..
что-то здесь не так.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
perl6
Помогающий

ru
Offline Offline

« Ответ #3 : 30-08-2018 16:02 » new

Ясно, всем спасибо, подумаем еще. Писалось то на скорую руку, долго сидеть некогда.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines