Выглядит не реально, можешь код с данными выложить тем более (500-1000)
элементов это ~ 8кб всего.
Тестовый пример:
======================
use Time::HiRes qw(time);
my @ips = (1..1001);
for my $i (0..4){
my $iponly = 995 + $i;
my $s = time ();
my %ips = map { $_ => 1 } @ips;
my $r1 = (not exists $ips{$iponly});
my $time1 = time - $s;
$s = time ();
my $r2 = grep $_ eq $iponly, @ips;
my $time2 = time - $s;
printf ("i=$i\tmap=%4.3fms grep=%4.3fms\n", $time1 * 1000, $time2 *
1000);
}
=======================
i=0 map=0.660ms grep=0.116ms
i=1 map=0.515ms grep=0.070ms
i=2 map=0.471ms grep=0.070ms
i=3 map=0.529ms grep=0.071ms
i=4 map=0.385ms grep=0.051ms
========================
Конечно map медленнее, но до двух секунд ему далеко(разница в три порядка)
Нужно смотреть на код и данные, может там есть магия.
25 ноября 2016 г., 14:00 пользователь Naim Sh via Moscow-pm <
[email protected]> написал:
> Коллеги, столкнулся с тем что код такого вида , используемый для поиска
> свободных 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
> <http://ironleg.azedunet.az/nytprof/NetAddr-IP-Lite-pm-197-line.html#1073>,
> avg 34µs/call
> # spent 9.56ms making 814 calls to NetAddr::IP::Lite::__ANON__[
> NetAddr/IP/Lite.pm:268]
> <http://ironleg.azedunet.az/nytprof/NetAddr-IP-Lite-pm-197-line.html#266>,
> avg 12µs/call
> {
> return $iponly;
> }
>
> Еще трабла в том что легендарный List::Util отдает быстро но почему не тот
> же результат( пробовал first , none ) что и grep?
>
> коллеги это нормально на более-менее среднем сервачке ?
>
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
>
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org