From 36730948fec49e1b56cae01fdea8d95f5a80b99f Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Tue, 12 Mar 2019 18:16:45 +0000 Subject: [PATCH] AttrTemplate.pm: fix performance problem for large installations (Forum #98465) git-svn-id: https://svn.fhem.de/fhem/trunk@18877 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/AttrTemplate.pm | 6 ++++-- fhem/fhem.pl | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fhem/FHEM/AttrTemplate.pm b/fhem/FHEM/AttrTemplate.pm index 05d3ec157..34964c623 100644 --- a/fhem/FHEM/AttrTemplate.pm +++ b/fhem/FHEM/AttrTemplate.pm @@ -77,7 +77,8 @@ AttrTemplate_Set($$@) my @list; for my $k (sort keys %templates) { my $h = $templates{$k}; - my $matches = grep /$name/, devspec2array($h->{filter}) if($h->{filter}); + my $matches; + $matches = devspec2array($h->{filter}, undef, [$name]) if($h->{filter}); if(!$h->{filter} || $matches) { push @list, $k; $haveDesc = 1 if($h->{desc}); @@ -97,7 +98,8 @@ AttrTemplate_Set($$@) my @hlp; for my $k (sort keys %templates) { my $h = $templates{$k}; - my $matches = grep /$name/, devspec2array($h->{filter}) if($h->{filter}); + my $matches; + $matches = devspec2array($h->{filter}, undef, [$name]) if($h->{filter}); if(!$h->{filter} || $matches) { push @hlp, "$k: $h->{desc}" if($h->{desc}); } diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 78043f032..41f15a4a1 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -120,7 +120,7 @@ sub concatc($$$); sub configDBUsed(); sub createNtfyHash(); sub createUniqueId(); -sub devspec2array($;$); +sub devspec2array($;$$); sub doGlobalDef($); sub escapeLogLine($); sub evalStateFormat($); @@ -1238,9 +1238,9 @@ AnalyzeCommand($$;$) } sub -devspec2array($;$) +devspec2array($;$$) { - my ($name, $cl) = @_; + my ($name, $cl, $initialList) = @_; return "" if(!defined($name)); if(defined($defs{$name})) { @@ -1262,7 +1262,7 @@ devspec2array($;$) next; } - my @names = sort keys %defs; + my @names = $initialList ? @{$initialList} : sort keys %defs; my @res; foreach my $dName (split(":FILTER=", $l)) { my ($n,$op,$re) = ("NAME","=",$dName);