[Moscow.pm] Очень медленное нахождение элемента в массиве

Naim Sh shafiev на gmail.com
Пт Ноя 25 03:54:38 PST 2016


да кроме 2 и 3  его нету .

Кстати как я понял Net::Patricia не очень мне подходит(удобен) ведь мне 
надо найти адрес которого нет в массиве

This module uses a Patricia Trie data structure to quickly perform IP 
address prefix matching for applications such as IP subnet, network or 
routing table lookups ?

On 11/25/2016 03:50 PM, Толян II via Moscow-pm wrote:
> У тебя может быть overload в нескольких местах:
> 1) В массиве @ips
> 2)  while( $ipn < $ipn->broadcast )              --- вызов метода + 
> overload
> 3) my $iponly = (split '/', $ipn++)[0]; #get     --- overload в чистом 
> виде + преобразование в строку.
>
>
>
>
> 25 ноября 2016 г., 14:38 пользователь Naim Sh via Moscow-pm 
> <moscow-pm на pm.org <mailto:moscow-pm на pm.org>> написал:
>
>     Оки и какой вариант быстрее того же map будет .
>     код имеет такой вид ( точнее его кусок который больше всего
>     времени и ест )
>
>     массив @ips имеет стандартные ipv4 адреса типа 10.56.6.2,
>     10.135.8.23  , 10.135.22.43 и тд и тп .
>
>             my $ipn = NetAddr::IP->new("$first_ip/$netmask");
>
>             while( $ipn < $ipn->broadcast )
>             {
>                 my $iponly = (split '/', $ipn++)[0]; #get
>
>                 if ( ! ( grep {$iponly eq $_}  @ips )  )
>                 {
>                     return $iponly;
>                 }
>
>             }
>
>     first отдает не то что мне нужно из под этой сети адрес в данном
>     случае 10.135.x.y а 10.56.x.y хотя да он первый пустой, но grep
>     выдает то что нужно.
>
>     Вроде tie переменных и т.д нету
>
>
>
>     On 11/25/2016 03:29 PM, Sergey Aleynikov via Moscow-pm wrote:
>
>         Добрый день,
>
>         map будет быстрее только если поисков по одному и тому же
>         исходному
>         массиву @ips будет несколько - т.к. операция построения хэша
>         дорогая.
>         Одноразовый поиск - греп быстрее. first возвращает другое (по
>         смыслу)
>         значение, чем греп (элемент, а не количество), но логически
>         для этой
>         задачи разницы быть не должно.
>
>         PS: my %ips; @ips{@ips} = (); быстрее, чем my %ips = map { $_
>         => 1 } @ips;
>
>         Best regards,
>         Sergey Aleynikov
>
>
>         25 ноября 2016 г., 14:00 пользователь Naim Sh via Moscow-pm
>         <moscow-pm на pm.org <mailto:moscow-pm на pm.org>> написал:
>
>             Коллеги, столкнулся с тем что код такого вида ,
>             используемый для поиска
>             свободных ip v4 адресов на размерах 500-1000 элементов
>             отрабатывается под 5
>             секунд версия с map :
>
>             my %ips = map { $_ => 1 } @ips;
>             if (not exists($ips{$iponly} ))
>             {
>                      return $iponly;
>             }
>
>
>               и с grep(sic!) ~2 секунду :
>
>             if ( ! ( grep {$iponly eq $_ } @ips ) )
>             # spent 27.4ms making 814 calls to
>             NetAddr::IP::Lite::broadcast, avg
>             34µs/call
>             # spent 9.56ms making 814 calls to
>             NetAddr::IP::Lite::__ANON__[NetAddr/IP/Lite.pm:268], avg
>             12µs/call
>             {
>                  return $iponly;
>             }
>
>             Еще трабла в том что легендарный List::Util отдает быстро
>             но почему не тот
>             же результат( пробовал first , none ) что и grep?
>
>             коллеги это нормально на более-менее среднем сервачке ?
>
>
>             --
>             Moscow.pm mailing list
>             moscow-pm на pm.org <mailto:moscow-pm на pm.org> |
>             http://moscow.pm.org
>
>
>     -- 
>
>     -- 
>     Moscow.pm mailing list
>     moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org
>
>
>
>

-- 
  

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20161125/5611337d/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm