Foros del Web » Programación para mayores de 30 ;) » Programación General »

Eficiencia programando. ¿Consume mucho un "if"?

Estas en el tema de Eficiencia programando. ¿Consume mucho un "if"? en el foro de Programación General en Foros del Web. Esta pregunta no es que vaya a acelerar mucho ningún programa, dadas las altas velocidades de hoy en día. Pero es por saberlo: ¿"cuánto" consume ...
  #1 (permalink)  
Antiguo 22/03/2005, 05:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Eficiencia programando. ¿Consume mucho un "if"?

Esta pregunta no es que vaya a acelerar mucho ningún programa, dadas las altas velocidades de hoy en día. Pero es por saberlo: ¿"cuánto" consume la comprobación que hace un if?

En este caso concreto que estoy programando lo pregunto:
Código:
Do until oRS.EOF
if not oRS.EOF then
SQL=SQL&oRS("column_name")&", "
else
SQL=SQL&oRS("column_name")&") VALUES("
end if
oRS.MoveNext
loop
Aquí estoy creando una sentencia SQL, mediante un bucle, a partir de un RecordSet.

He metido un "if" dentro de ese bucle, que va comprobando si se ha llegado al final del RecordSet, para en ese caso, cerrar el paréntesis de la cadena de texto que conforma la sentencia SQL.

Entonces mi duda es: ¿Qué es más eficiente, meter un if que en cada iteración va comprobando si está en el final del RecordSet, o no ponerlo, y ya fuera del bucle usar funciones de tratamiento de cadena para borrar los últimos caracteres y poner los que yo quiero?.

Saludos

Última edición por un_tio; 22/03/2005 a las 05:54
  #2 (permalink)  
Antiguo 22/03/2005, 08:36
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Un if como tal ocupa bastante poco, en este caso me parece que es un tanto redundante ya que oRS.EOF se comprueba en el Do, hace mucho que no programo en VB, pero fijate si asi te funciona bien:

Código:
Do While not oRS.EOF
SQL=SQL&oRS("column_name")&", "
oRS.MoveNext
loop
SQL=SQL&oRS("column_name")&") VALUES("
oRS.MoveNext
Deberia ser mas eficiente; de cualquier manera en este caso es mucho mas costoso hacer el EOF que el if en si mismo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 22/03/2005 a las 08:43
  #3 (permalink)  
Antiguo 22/03/2005, 10:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Claro, así es mejor! Gracias por tomarte las molestias. Sabía que había una redundancia... Así que el EOF consume bastante... a lo mejor sería mejor poner una variable, en la que estuviera guardada el tamaño del Ors, y hacer un for.

Algo así:

longitud=oRS.RecordCount

for x=1 to longitud
...
Next

Última edición por un_tio; 22/03/2005 a las 10:37
  #4 (permalink)  
Antiguo 22/03/2005, 10:34
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
No hay problema

Realmente no se cuanto consume el EOF, si es una llamada como me imagino mas que el if seguro, de cualquier manera en este caso no vale la pena repetirlo. Yo lo dejaria asi, debe estar lo suficientemente optimizado el control.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 22/03/2005, 10:38
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Jeje, hago notar que he editado el mensaje y he añadido un bucle for de ejemplo al final, pero vamos, en tu mensaje ya casi que se da por contestado lo anterior.

Saludos
  #6 (permalink)  
Antiguo 22/03/2005, 10:54
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Si, no habia leido lo ultimo que agregaste, si RecordCount devuelve el valor en el cual EOF se transforma en verdadero teoricamente esa ultima version seria logicamente la mas eficiente de todas.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 22/03/2005, 12:31
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Lo sospechaba, y acabo de comprobarlo, que el código que pusiste no funcionaría, por la sencilla razón de que el último valor del oRS, sí sería usado dentro del bucle. Que no es que cuando llegue al EOF, se salga del bucle directamente, sino que antes dará un último recorrido dentro de él.

Pero de idea estaba bien, y quizá haya una forma de implementarlo así usando el EOF.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:35.