shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Array mais lento do que "-f $aquivo"


From: Julio C. Neves
Subject: Re: [shell-script] Array mais lento do que "-f $aquivo"
Date: Wed, 24 Oct 2018 13:07:10 -0300

Se os arquivos não tiverem espaço em branco no nome, vc poderia trocar:

local ROLES=($(ls /etc/roles)) || return 1
for r in "${ROLES[@]}"; do

Por:

local ROLES=$(ls /etc/roles) || return 1
for r in $ROLES; do

Aí vc ganharia tempo, pois vetores são bem mais lentos (por isso a partir do Bash 4.0 incorporaram a instrução mapfile para gerar vetores a partir de arquivos).

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Conheça nosso portal educacional e estude conosco: 
»  Treinamento presencial (em 4 sábados) no RJ e BSB 
    em http://bit.ly/cursoshelljulioneves                   



Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.



Em qua, 24 de out de 2018 às 12:54, Eri Ramos Bastos address@hidden [shell-script] <address@hidden> escreveu:
 

Obrigado Júlio.

Melhorou, mas ainda inferior à original. Acho que vou manter o que tinha mesmo. ;)

Com sua sugestão:
real    0m2.193s
user    0m0.328s
sys     0m1.772s

Original:
real    0m2.114s
user    0m0.268s
sys     0m1.768s

Abraços!

On Wed, Oct 24, 2018 at 12:17 PM 'Julio C. Neves' address@hidden [shell-script] <address@hidden> wrote:


Fala Eri
Acho vc ganharia performance se fizesse:

check_role() {
local ROLES=($(ls /etc/roles)) || return 1
for r in "${ROLES[@]}"; do
[[ "$r" == "$1" ]] && return 0
done
}

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Conheça nosso portal educacional e estude conosco: 
»  Treinamento presencial (em 4 sábados) no RJ e BSB 
    em http://bit.ly/cursoshelljulioneves                   



Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.



Em qua, 24 de out de 2018 às 11:41, Eri Ramos Bastos address@hidden [shell-script] <address@hidden> escreveu:
 

Olá, lista!

Tenho um script que roda a seguinte função ~300 vezes (sourced de outro arquivo):

check_role() {
if [ -d /etc/roles/ ]; then
if [ -f /etc/roles/$1 ]; then
return 0
fi
fi
return 1
}

Pensei que iria ganhar performance fazendo isso:

list_roles() {
if [ -d /etc/roles/ ]; then
cd /etc/roles
ls
else
echo ""
fi

}

export ROLES=($(list_roles))
check_role() {
local role=$1
for r in "${ROLES[@]}"; do
[[ "$r" == "$role" ]] && return 0
done
return 1

}

Mas na verdade o tempo de execução piorou:

Original:
real    0m2.069s 
user    0m0.300s 
sys     0m1.644s

Novo:
real    0m2.857s
user    0m0.348s
sys     0m2.296s


Me parece contra-intuitivo, já que o original precisa checar em disco todas as vezes. Onde estou errado?

Obrigado!




reply via email to

[Prev in Thread] Current Thread [Next in Thread]