Mais desempenho

23 respostas
P

O que tem mais desempenho, um conjunto de if else, ou um bloco switch-case?

23 Respostas

cv1

Eu ia responder, mas acabei me perguntando isso e nao consegui responder. Talvez vc consiga: mesmo que exista uma diferenca de performace, que diferenca isso faz na pratica? :slight_smile:

P

Mas então se existir essa diferença de performance, quem leva a melhor?

Leandro_Rangel_Santo

a analise que eu vou fazer é meio empirica ,mas analisando que a clausula switch foi feita para evitar ifs aninhados ,ela deve ter maior desempenho que ifs

Leandro_Rangel_Santo

a coisa aqui é realTime mesmo ,quando eu fui postar meu reply ,só tinha a pergunta ,quando eu acabei de digitar ,ja era o 4º :wink:

cv1

Estamos num impasse. Eu quero que vc responda a minha pergunta, e vc quer que eu responda a sua pergunta. Entao, como eu sei a resposta da sua, e ela é o assunto desse tópico, eu estou em vantagem. Logo, eu posso me dar ao luxo de exigir que vc responda a minha primeiro :wink:

dgouvea

Se as variáveis que você for comparar forem do tipo String, não conseguirá escapar do Conjunto de ifs.

P

Não estou usando, vcs ainda não me disseram qual tem a melhor performance… desculpe arrogância

Luca

Olá

Ping, primeiro me diga o resultado do benchmark que você deve ter feito cronometrando seus 2 códigos. Depois me conte o resultado da aplicação do javap nos seus 2 códigos que quer comparar. Se souber estes dados e se conhecer os códigos que quer comparar poderei avaliar alguma coisa.

[]s
Luca

P

“Luca”:
Olá

Ping, primeiro me diga o resultado do benchmark que você deve ter feito cronometrando seus 2 códigos. Depois me conte o resultado da aplicação do javap nos seus 2 códigos que quer comparar. Se souber estes dados e se conhecer os códigos que quer comparar poderei avaliar alguma coisa.

[]s
Luca


:oops: Não fiz esses testes… eu só queria saber qual é melhor

bush

:cry:

cv1

Entao, pq nao fazer? :slight_smile:

Eh definitivamente o melhor jeito de saber :wink:

P

Entao, pq nao fazer? :slight_smile:

Eh definitivamente o melhor jeito de saber ;)
Primeiramente não estou afim, hehe… também não tenho tempo e ainda teria que achar um benchmark (não sei direito como se escreve)

cv1

Bom, nesse caso nao tem muito o que a gente possa fazer pra te ajudar a nao ser te chamar de preguicoso, non? :smiley:

RodrigoSol

Entao, pq nao fazer? :slight_smile:

Eh definitivamente o melhor jeito de saber ;)
Primeiramente não estou afim, hehe… também não tenho tempo e ainda teria que achar um benchmark (não sei direito como se escreve)

Eh por que você acha que tem alguém afim de fazer por você? hehe

Hempx

velho na teoria pelo menos switch - case é mais rapido…
porque o compilador otimiza o codigo… pelo que meu professor já me disse( ele tava falando de C++, mas acredito q java siga a msm filosofia ) que o compilador faz otimizações q o compilador qd testa… e ver por exemplo:
switch( 5 ) ele vai direto no case 5… tipo não fica testando até chegar no cinco… na verdade não sei se ele vai “diretamente no case 5”, mas acho q não acontece o pior caso tipo nos if else de sua opção ser a ultima… então tem de testar todos os casos…

não sei deu pra entender o que eu quis dizer, e não sei se eu falei besteira tbm… muheahuaeu =)
mas eu pelo menos… podendo usar… eu uso switch…

cv1

Voce pode apontar de onde vc tirou essa teoria? Pra mim, isso tem cheiro de fofoca-não-fundamentada-mas-que-parece-razoável-e-todo-mundo-fala-na-hora-do-almoço-pra-parecer-inteligente :smiley:

No caso do Java, falso tambem. O javac nao faz nenhuma otimizacao - ele apenas cospe um .class a partir de um .java, ou seja, ele é mais um conversor do que um compilador. E, se vc olhar, o bytecode gerado por um switch e o bytecode gerado por um conjunto de ifs fazendo a mesma operação, vai descobrir se ele trata os dois de forma diferente ou não - daí a sugestão do Luca de usar javap.

Hempx

Voce pode apontar de onde vc tirou essa teoria? Pra mim, isso tem cheiro de fofoca-não-fundamentada-mas-que-parece-razoável-e-todo-mundo-fala-na-hora-do-almoço-pra-parecer-inteligente :smiley:

professor Theldo Algoritmos e tecnicas de programação 2 - PUC-mg.
essa é minha referencia…
pode até ser mentira… mas hora nenhum eu afirmei isso que eu to falando e nem vc sabe se é verdade então não cabe julgamentos desse tipo aqui…


No caso do Java, falso tambem. O javac nao faz nenhuma otimizacao - ele apenas cospe um .class a partir de um .java, ou seja, ele é mais um conversor do que um compilador. E, se vc olhar, o bytecode gerado por um switch e o bytecode gerado por um conjunto de ifs fazendo a mesma operação, vai descobrir se ele trata os dois de forma diferente ou não - daí a sugestão do Luca de usar javap.

não é interrese nenhum meu saber a resposta… apenas tava tentando ajudar o carinha lá… se e java é assim eu não sei… mas pelos tipo de programas que eu faço e tenho planos de fazer… a performance não é critica a tal ponto… só q no caso ele tava falando isso sobre as otimizações que o C++ faz…
java é outros 500… mas pelo menos pensei que ia ter uma melhora… porque se não é apenas um frescurada a mais… prefiro acreditar q nao seja isso…

entre sua resposta e a do Theldo… sou mais a dele…

sem +

V

“Ping”:

Primeiramente não estou afim, hehe… também não tenho tempo e ainda teria que achar um benchmark (não sei direito como se escreve)

Se o problema é falta de vontade, contrata uma consultoria para tirar suas dúvidas então, eles estarão sempre a sua disposição

oazuc

“Vegetto”:

Se o problema é falta de vontade, contrata uma consultoria para tirar suas dúvidas então, eles estarão sempre a sua disposição

Acho que é isso que ele está tentando fazer, mas esqueceram de avisar que o pedido tem que ser feito via depósito identificado 8)

louds

Falar qual vaii ser mais rápida é complicado dado que um JIT’er pode converter a sequencia de ifs no mesmo código que um switch.

Falando do bytecode emitido, usando if`s serão emitidos instruções de comparação para cada um deles. No caso do switch depende da densidade númerica dos teus cases. Se eles forem sequenciais (case 1: … case 2: … case 3: … … … case n: …) o javac pode usar a instrução mais rápida que executa um jump indexado, caso contrario emite outra, que usa uma tabela ordenada e faz busca binaria para encontrar o case.

Porém se voce precisa deste grau de otimização e possui esse tipo de dúvida sugiro que contrate uma consultoria preparada para resolver teu problema de performance (dica: me mande um PM).

P

“Vegetto”:
“Ping”:

Primeiramente não estou afim, hehe… também não tenho tempo e ainda teria que achar um benchmark (não sei direito como se escreve)

Se o problema é falta de vontade, contrata uma consultoria para tirar suas dúvidas então, eles estarão sempre a sua disposição

Valeu pela sua super-ajuda, em primeiro lugar, eu achei que tivesse alguém que já tivesse tido está dúvida antes ou que já tivesse um benchmark na máquina para testar… também não tirei esta dúvida do nada, eu estou fazendo um projeto de um sistema e vão existir muitos, mas muitos switch-case ou if´s… mas brigadão pela sua ajuda…

Daniel_Quirino_Olive

“Ping”:
“Vegetto”:
“Ping”:

Primeiramente não estou afim, hehe… também não tenho tempo e ainda teria que achar um benchmark (não sei direito como se escreve)

Se o problema é falta de vontade, contrata uma consultoria para tirar suas dúvidas então, eles estarão sempre a sua disposição

Valeu pela sua super-ajuda, em primeiro lugar, eu achei que tivesse alguém que já tivesse tido está dúvida antes ou que já tivesse um benchmark na máquina para testar… também não tirei esta dúvida do nada, eu estou fazendo um projeto de um sistema e vão existir muitos, mas muitos switch-case ou if´s… mas brigadão pela sua ajuda…

Não conheço nada do seu sistema, mas este monte de if’s/switches está me cheirando a anti-pattern. Não sei se cabe, mas já tentou dar uma olhadinha em um negócio chamado Command-pattern?!

tnaires

Ah, qual é a d vcs? O cara chega aqui pra fazer uma simples pergunta, e o tópico se transforma numa guerra de julgamentos?
Pow, eu ficaria super-envergonhado. Eu chegando aqui pra fazer minha perguntinha, e ser metralhado desse jeito…
Espero q me entendam… Não estou falando isso pra ofender ninguém.

Criado 18 de março de 2004
Ultima resposta 24 de mar. de 2004
Respostas 23
Participantes 13