Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Datos De Gambas


Objetivo: Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Datos De Gambas
No sé por qué, sus razones habrá, pero me llevan los demonios con la lentitud de las clases de estructuras de bases de datos en Gambas.

Me refiero a usar las colecciones connection.tables y connection.tables[n].fields.

En algunas aplicaciones he llegado a crear mi propio diccionario de datos en una tabla llamada Campos dentro de una base de datos de sqlite .config, con la información necesaria sobre los campos de todas las tablas manejadas por la aplicación, a saber: nombre de la base de datos,nombre de la tabla, nombre del campo, tipo, ancho, si es clave primaria, si puede ser nulo, valor por defecto, comentarios y titulo para los formularios.
En el momento de la configuración de la aplicación (primera ejecución), se crea este "Diccionario de campos" y luego la velocidad de manejo de los datos se incrementa de manera exponencial.

Últimamente ya no uso esa técnica, la he cambiado por un par de funciones que hacen el mismo papel y, casi, en el mismo tiempo...
Sólo pongo aquí el desahogo quejica de la lentitud de tales clases de gambas.

Ejemplo:
Suponte que quieres conocer el tamaño de cada uno de los campos de una tabla para formatear el ancho de las columnas de un gridview, por ejemplo.
Siguiendo las clases de gambas harías algo así:

dim anchostabla as integer[]
Dim campo as field
For Each campo In mComun.datos.Tables[mitabla].fields
anchostabla.Add(campo.Length)
Next

Corto, sencillo y claro.... pero en casa me tarda 6 segundos en recorrer una tabla con 37 campos.

Si por el contrario lo hace tú "a pelo" con algo así (en una base MySQL) harías algo así:
dim anchostabla as integer[]
dim alinea as string[]
dim r as result

r = mComun.datos.Exec("show fields from " & mitabla)
While r.available
Select Case r!Type
Case "text"
anchostabla.Add(100) 'un ancho estándar para campos sin longitud
Case "date"
anchostabla.Add(80) 'un ancho estándar para fechas
Case Else
cad = Split(r!Type, "(,)")
If cad.count > 2 Then
anchostabla.Add(Val(cad[1]))
Else
anchostabla.Add(-1) 'para todo lo demás Mastercard
Endif
End Select
r.movenext
Wend

Más engorroso, más líneas de código, más llamadas a funciones...y tarda menos de un segundo.

Pareciera que las clases de gambas, cada vez que releen la estructura tuvieran que volver a acceder al servidor para cada iteracción... no sé, no sé, pero es un follón.

última edición por shordi el Jueves, 06 Febrero 2014, 18:09; editado 1 vez
Perfil MP  
Objetivo: Re: Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Datos De Gambas
Tampoco es tan grande tu código.

Y en manos de un profesional no cuesta tanto hacer eso.

jeje, me gustaría que vieras las funciones comprimidas de Python y si no la función lambda...
Es que es era lo ultimo que he tocado en el curos de CodeAcademy. La primera lo vi en el curso de Coursera me pareció complicada,luego no tanto.
Pero, ¿ que ocurre ?. Que como estamos acostumbrados a hacer las cosas de una manera nos es difícil hacerla de otras. Inercia ?.


Te añado un ejemplo simple de un for en una sola linea.

Eso crearía una lista o array del 0 al 9 en lista1. En una sola linea!.
lista1 = [ i for i in range(10)]


Esto haría lo mismo, solo que serían una lista de cuadrados.
lista2 = [ i ** 2 for i in range(10)]


Luego hay algo que para probar funciones, desde luego es preferible definir la función con su nombre.
Se usa la función lambda para crear funciones anónimas.

Solo mostraría las "o". No hay un for, pero se hace
# Ejemplo1
s = "Hoola Mundo"
print filter(lambda x: x == 'o',s)


Como la union de dos cosas. Primero la creación de los números al cuadrado
Y luego en lambda muestra solo un limite de números
# Ejemplo3
squares = [x ** 2 for x in range (1,11)]
print filter( lambda x: x >= 30 and x <= 70,squares)


Lo que quiero decir. Que no solo depende de lo que tenga gambas, no seas cómodo. Maese Shordi.
Tienes que experimentar.

Creo que nos volvemos acomodados con las funciones del lenguaje.
Si por primera vez creas una función que te muestre los números primos, la habrás hecho tu mismo.

Aprenderás a solucionar el problema por tus medios. Has aprendido mas que usando una función predefinida en el lenguaje.
Luego puede existir una función definida en el lenguaje, que hace, de que esta compuesta...npi.

El programador debe ser creativo. No debemos acomodarnos y que nos salgan telarañas en las neuronas.
Tampoco es que vayamos a reinventar la rueda.

P.d con mi mente acostumbrada a basic me es bastante difícil entender las funciones de arriba la primera vez.
Puede ser cierto que el basic mal acostumbra al programador. Todo es cuestión de mucha practica.

Saludos

última edición por Shell el Viernes, 07 Febrero 2014, 10:10; editado 5 veces
Objetivo: Re: Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Datos De Gambas
No me quejaba de eso... pero para pasar el rato: Nada como C

Premios al código C más 'ofuscado'

Perfil MP  
Objetivo: Re: Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Datos De Gambas
jejeje..tampoco hay que llegar a tanto.

Que raro que sea tan lenta la función.

Por cierto. Tenemos la función clasificar un array.
¿ Qué diferencia habrá en rapidez si creamos nuestro propio método y lo comparamos con el de gambas ?.
Es la misma historia. Ademas tendríamos que saber que método de ordenación usa la función interna.

Es como todo. Dependerá de la optimzación que tenga.

Y si de casualidad, haces un método mas rapido tu mismo. Pues igual.

Saludos

Objetivo: Re: Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Datos De Gambas
Tan sólo habría que meterse en semejantes berengenales cuando la eficiencia de la función gambas fracase manifiestamente. Con eso de Activar Perfil, es fácil detectar dónde es.

Saludos.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4112s (PHP: -77% SQL: 177%)
Consultas SQL: 46 - Debug off - GZIP Activado