Pequena comparação
Publicado em Developer
Eu respondi que para um relatório grande necessitaríamos de muita RAM para armazenar o dito cujo (deixo isso para outros programas que gostam de RAM por aí ;-), mas mesmo assim fiz alguns testes em relação à performance da coisa. "Caminhar" pelo array seria o melhor a fazer ali, mas em uma situação onde não se pudesse guardar a posição corrente, eu precisaria ir removendo os elementos do array, tão logo exibisse a linha de dados. Resolvi fazer um teste preenchendo o array, removendo seu elemento final usando pop, invertendo seus elementos e usando pop novamente (isso seria necessário para seguir a ordem do relatório, afinal, pop remove o último elemento, mas sem inverter iria imprimir o relatório de trás para frente) e finalmente usando shift (que remove o primeiro elemento, mas "empurra" todo o resto para baixo).
Fiz um teste com um array de 15000 elementos, aqui em um AMD Sempron 2500+. Preencher o array foi praticamente instantâneo, remover com pop, inverter e remover com pop também, mas usando shift levou 31 segundos.
Só por curiosidade resolvi fazer o mesmo teste em Ruby. Errr ... foi instantâneo. 0 segundos. Todos os testes. Resolvi aumentar o array para 150000 elementos (10x mais). 4 segundos. :-)
Discutindo um pouco com o pessoal (vejam bem, estávamos discutindo e conversando, ao contrário de muito sujeito que adora fazer flamewar com linguagens), a causa disso é por que todo array em PHP é um hash, como diz a sua documentação:
An array in PHP is actually an ordered map. A map is a type that maps values to keys. This type is optimized in several ways, so you can use it as a real array, or a list (vector), hashtable (which is an implementation of a map), dictionary, collection, stack, queue and probably more. Because you can have another PHP array as a value, you can also quite easily simulate trees.Fica bem prático, mas já deu para ver o preço que se paga na coisa. :-p
Atualizado em 25/05/2005 12:57 Xi, fiz barbeiragem. :-( Eu havia usado um shift no segundo teste, e não um pop. Usando pop a remoção dos elementos foi instântanea também. Mea culpa, já consertei o texto.
Comentários
Comentários fechados.
Sem nenhum comentário.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300