Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Queja Y Lamento De La Lentitud De Las Clases De Estructuras De Bases De Dat...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 07 Febrero 2014, 10:10; editado 5 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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'
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problema Con El Gestor De Bases De Datos D... Bichopapao Bases de Datos 2 Jueves, 16 Diciembre 2010, 09:52 Ver último mensaje
Bichopapao
No hay nuevos mensajes Recopilacion De Ayuda Sobre Bases De Datos... jsbsan General 4 Martes, 09 Agosto 2011, 18:10 Ver último mensaje
jsbsan
No hay nuevos mensajes Dos Preguntas. Partir Un Comando Largo Y U... faranda77 General 2 Sabado, 20 Febrero 2016, 14:12 Ver último mensaje
vuott
No hay nuevos mensajes Activar O No Los Controladores De Bases De... Shell Bases de Datos 3 Lunes, 24 Octobre 2016, 11:25 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron