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

Sergey Aleynikov sergey.aleynikov на gmail.com
Пт Ноя 25 03:29:07 PST 2016


Добрый день,

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> написал:
> Коллеги, столкнулся с тем что код такого вида , используемый для поиска
> свободных 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 | http://moscow.pm.org
>


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