Ir para conteúdo
Luiz Henrique

unset em variável melhora desempenho?

Recommended Posts

Olá pessoas,

 

Queria saber se há ganho de desempenho se após não precisar da variável mais eu destruir ela.

Eu uso uma variável default aqui ex:

 

$callback = Classe::primeiroSelect();

 

Pego os dados necessários em foreach por exemplo e reutilizo a variável $callback  em outra consulta

$callback = Classe::segundoSelect();

 

E assim sucessivamente.

Então vale a pena dar um unset($callback) após cada select? Ou no final do method? Ou não precisa pois não faz diferença?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, Luiz Henrique disse:

Queria saber se há ganho de desempenho se após não precisar da variável mais eu destruir ela.

Na verdade você está consumindo mais por eliminar.

Não diria na seguinte situação dentre outras no contexto similar:

Tenho um array onde executo loop nele para redenir valores. Só que novamente tenho que percorrer esse array em alguma parte futura do código e muitos dos índices não serão usados mais.

Nesse caso eliminar os índices já no primeiro laço de repetição posso chegar a ganhar em desempenho ou não, dependendo do que vai ser eliminado.

 

unset seria mais indicado se de acordo com o programa uma coisa não possa ser o esperado, podemos eliminar, e se mais tarde não existir, retornar a situação de erro de forma controlada.

 

Para completar isso (não que seja algo errado):

14 horas atrás, Luiz Henrique disse:

$callback = Classe::primeiroSelect();

 

Não reutilize, a menos que seja realmente necessário.

Isso pode chegar a dar dor de cabeça em manutenções futuras e ter que ficar relendo várias vezes o código para saber o que realmente $callback está armazenando.

 

Uma situação onde a gama de dados são registros que podem ultrapassar de 1000 e o loop deve ser excetuado duas vezes no segundo querys são lançadas.

Eliminar os índices no primeiro loop poupa recursos que seriam usados novamente:

Spoiler

$categoryData = $select->result();

// LOCALIZAR A CATEGORIA ALGO
// DEFINIR SUA ORDEM DE EXIBIÇÃO
// APAGAR
foreach ($categoryData as $key => $del) {
    if ($del->c_hash == $categoryHash) {
        $order = $del->c_order;
        $delete->query("doc_category", "c_hash=:ch", "ch={$del->c_hash}");
        unset($categoryData[$key]);
    }
}

// ATULIZAR ORDEM DE EXIBIÇÃO DAS CATEGORIAS MAIOR DO QUE A APAGADA
if ($delete->count()) {
    foreach ($categoryData as $upd) {
        if ($upd->c_order > $order) {
            $update->query(
                "doc_category",
                ['c_order' => ($upd->c_order - 1)],
                "c_hash=:ch", "ch={$upd->c_hash}"
            );
        }
    }
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode executar um teste de velocidade de execução para ver o que é mais performático e tirar a prova
 

$inicio1 = microtime(true);
//Teu código
$total1 = microtime(true) - $inicio1;
echo 'Tempo de execução do script: ' . $total1;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ecacarva
      Boa noite pessoal
       
      Tenho um aplicativo em php com MySQL que tem aproximadamente 150 tabelas (MySQL 5.7)  e é usado via web (apache) por cerca de 5 usuários.
      O sistema foi instalado em uma máquina virtual (rodando em um Windows Server), com 8 GB de RAM.
      Um novo projeto visa o aumento de usuários de 5 para 100 aproximadamente em todo o Brasil.
       
      Existe uma maneira de melhorar o desempenho do .servidor por meio de cálculos, por exemplo, existe uma fórmula onde somamos o tanto de RAM provável que cada usuário usa, por exemplo: João = 2 GB de RAM, Maria = 3 GB de RAM (Toal 5 GB de RAM), total de ocupação provável 5 GB?  
       
      É recomendável ter um servidor de banco separado do servidor web para melhorar o desempenho ?
       
      Obrigado
       
       
       
       
       
       
    • Por Johnny Saymon
      Olá!
       
      Cenário: Tenho uma classe NotaFiscal que tem um relacionamento com vários outros objetos, como Cliente, Fornecedor, Produtos e etc, sendo que estes objetos ligados diretamente ainda tem seus relacionamentos com outros objetos.
       
      Objetivo: Apresentar uma lista de notas fiscais quem contém poucos dados, como número da nota, nome do cliente e valor total.
       
      Dúvida: Recuperar o objeto NotaFiscal e todas as suas relações em um banco de dados, por exemplo, não seria um grande problema de desempenho, visto que preciso de poucos dados? Me parece um erro obter apenas as notas sem suas relações e um exagero obter tudo. 
    • Por free4k
      Gente, quero saber qual dessas GPUs é melhor, e se tem alguma melhor que essas até uns R$ 250.
      http://produto.mercadolivre.com.br/MLB-753628936-placa-video-geforce-gt-610-2gb-ddr3-hdmi-dvi-point-of-view-_JM
      http://produto.mercadolivre.com.br/MLB-698402692-placa-de-video-geforce-9500-gt-1gb-gddr2-128-bits-pov-_JM?flash=f4c2b56a6277bc49dfa687c09d15fcbf621bac2a&noIndex=true
      Obrigado!
    • Por heijimrt
      Olá,
       
      Vou começar um projeto onde os usuários enviarão seus dados e fotos por meio de um formulário (informações irão para o db/ uma pasta "uploads"), e no final de cada mês, vai ser escolhido um "usuário do mês" para uma sessão de fotos/ video.
      As fotos/ video do usuario do mês devem ter acesso apenas há assinantes (mensais ou anuais - com pagamento realizado pelo pagseguro/paypal).
       
      Gostaria de saber o que fariam ou usariam para desenvolver, pensando em desempenho e segurança.
      Por favor me avisem se não fui claro, ou faltei com alguma informação relevante.
       
      Toda ajuda é bem vinda,
      Obrigado!!
    • Por Eduardo_555
      Olá pessoa do forum, tenho um notbbok acer aspires 4739-6886 com a segunte configuraçao
       
      memoria ram:3gb
      processador:i3 de 2.4ghz cache de 3mb aproximado.
      placa de video intel hd grapics com 128 de memo dedicada.
       
      enfim not mediano
       
      gostaria de saber se eu alterar a memoria o original dele esta com um pent de 1gb e outro de 2gb
       
      eu pensei em manter este pent de 2 e colocar outar de quatro, pra totalizar 6gb de ram
       
      sera que vai dar diferença na velocidade ou so vou gastar dinheiro,
       
      estou rodando o win 10 64bit
       
      oque acham??
       
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.