LOOPS DE REPETICAO - QUAL O MELHOR?
Dae galera do VB Mania
é o seguinte
Estou lendo alguns materiais sobre VB e tenho dúvidas acerca dos loops de repetição.
Internamente, quando o programa executa o loop, existe um tipo mais rápido do que o outro ou todos são iguais?
Qual seria o melhor? For, while do, while do - until... ou, internamente, todos tem o mesmo desempenho.
A Microsoft lançou algum relatório/documentação que comprove - verdadeiramente - qual desses laços é o mais eficiente?
Obrigado
T+
é o seguinte
Estou lendo alguns materiais sobre VB e tenho dúvidas acerca dos loops de repetição.
Internamente, quando o programa executa o loop, existe um tipo mais rápido do que o outro ou todos são iguais?
Qual seria o melhor? For, while do, while do - until... ou, internamente, todos tem o mesmo desempenho.
A Microsoft lançou algum relatório/documentação que comprove - verdadeiramente - qual desses laços é o mais eficiente?
Obrigado
T+
kra, depende da situação que você está ...!!
YOUNG_H4CK3R me dê algum exemplo de quando o while é mais rápido do que o For. Eu achei no livro Aprenda Visual Basic 5 em 24 horas que o melhor loop é aquele que "torna mais claro e limpo o teste compartativo". Do jeito que o livro apresenta, parece que é tudo igual... mas, se existe alguma diferença, gostaria que você me apontasse...
bom...deixe-me pensar...hmmmm....
Note que mesmo por poucos milésimos de segundos, While é mais rápido.
Dim X As Integer
Private Sub Form_Click()
For X = 0 To 100
X = X + 1
Next
MsgBox "X criado em : " & Timer & " milesimo de segundos com a clausula For"
End Sub
Private Sub Form_Load()
While X < 100
X = X + 1
Wend
MsgBox "X criado em : " & Timer & " milesimo de segundos com a Clausula While"
End Sub
Note que mesmo por poucos milésimos de segundos, While é mais rápido.
Dim X As Integer, Tempo, Tempo1
Private Sub Form_Click()
For X = 0 To 100
X = X + 1
Next
Tempo1 = Timer
MsgBox "X criado em : " & Tempo1 & " milesimo de segundos com a clausula For"
MsgBox "A diferença entre as clausulas foi de : " & Tempo - Tempo1 & "."
End Sub
Private Sub Form_Load()
While X < 100
X = X + 1
Wend
Tempo = Timer
MsgBox "X criado em : " & Tempo & " milesimo de segundos com a Clausula While"
End Sub
alias:
MsgBox "A diferença entre as clausulas foi de : " & Tempo1 - Tempo & "."
Willian, o seu teste é inválido e não prova nada pelos seguintes motivos:
1)
Você sobrecarrega o For fazendo a soma X = X + 1 sendo que este incremento já é realizada implicitamente pela instrução For (isto altera a diferença entre o While e o For), além de alterar a valor da variavel que controla o laço de repetição, isto é um erro básico em programação e dependendo da operação pode ocasionar um loop infinito dificil de ser detectado. Neste exemplo o laço é executado 51 vezes ao invés de 101.
2) Teste o exemplo abaixo movendo o While para o evento Form_Load e o For para o evento Form_Click, e veja agora qual é o mais rápido ?
ETERINO,
1) O uso For, While, Until deve ser adequado a uma determinada situação, imagine que vc queira percorrer um recordset aberto pelo ADO, qual laço de repetição vc irá usar ?
2) E se vc for repetir um conjunto de instruções até (Until) que uma determinada condição seja Falsa ?
3) E se vc for repetir um conjunto de instruções enquanto (While) uma determinada condição for Verdadeira ?
4) E se vc for repetir um conjunto de instruções 20 vezes (For) ?
Eu acho dificil medir performance em laços de repetição, use o que melhor se adequar a determinada situação.
1)
Citação:For X = 0 To 100
X = X + 1
Next
Você sobrecarrega o For fazendo a soma X = X + 1 sendo que este incremento já é realizada implicitamente pela instrução For (isto altera a diferença entre o While e o For), além de alterar a valor da variavel que controla o laço de repetição, isto é um erro básico em programação e dependendo da operação pode ocasionar um loop infinito dificil de ser detectado. Neste exemplo o laço é executado 51 vezes ao invés de 101.
2) Teste o exemplo abaixo movendo o While para o evento Form_Load e o For para o evento Form_Click, e veja agora qual é o mais rápido ?
Dim X As Integer, Tempo, Tempo1
Private Sub Form_Click()
While X < 100
X = X + 1
Wend
Tempo = Timer
MsgBox "X criado em : " & Tempo & " milesimo de segundos com a Clausula While"
MsgBox "A diferença entre as clausulas foi de : " & Tempo - Tempo1 & "."
End Sub
Private Sub Form_Load()
For X = 0 To 100
' X = X + 1
Next
Tempo1 = Timer
MsgBox "X criado em : " & Tempo1 & " milesimo de segundos com a clausula For"
End Sub
ETERINO,
1) O uso For, While, Until deve ser adequado a uma determinada situação, imagine que vc queira percorrer um recordset aberto pelo ADO, qual laço de repetição vc irá usar ?
2) E se vc for repetir um conjunto de instruções até (Until) que uma determinada condição seja Falsa ?
3) E se vc for repetir um conjunto de instruções enquanto (While) uma determinada condição for Verdadeira ?
4) E se vc for repetir um conjunto de instruções 20 vezes (For) ?
Eu acho dificil medir performance em laços de repetição, use o que melhor se adequar a determinada situação.
afff...rssrs
Tópico encerrado , respostas não são mais permitidas