Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Gasto alto en memoria atacando bases mysql y archivo texto

Estas en el tema de Gasto alto en memoria atacando bases mysql y archivo texto en el foro de Visual Basic clásico en Foros del Web. Hola: He realizado un programa en visual basic que crea 4 recordsets a una base de datos mysql a través de un dsn para escribir ...
  #1 (permalink)  
Antiguo 25/10/2007, 03:13
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta Gasto alto en memoria atacando bases mysql y archivo texto

Hola:

He realizado un programa en visual basic que crea 4 recordsets a una base de datos mysql a través de un dsn para escribir en ellas. Las conexiones son del tipo:

Código:
Set CONEXION = New Connection
CONEXION.CursorLocation = adUseClient
CONEXION.Open "DSN=nombre;uid=usuario;pwd=password;"

Dim REC1 As ADODB.Recordset
Set REC1 = New Recordset
REC1.Open "tabla1", CONEXION, adOpenStatic, adLockOptimistic
Tengo la sensación de que algo falla al abrir las conexiones ya que cuando se abren el sistema pide más memoria. Llega a usar aproximadamente 1'5 GB de maemoria (haciendo uso de la memoria virtual, claro).

El proceso que sigue a esto es copiar un fichero de más de 100 MB en otro con la instruccion FileCopy. Una vez hecho esto se procesa leyendo linea a linea con Line Input #log, linea e incorporando los datos en la base de datos.

No sé si estoy haciendo algo mal pues me parece excesivo el uso de memoria. Si no veís nada raro hasta aquí puedo daros más información.
  #2 (permalink)  
Antiguo 25/10/2007, 08:06
Avatar de Laforge  
Fecha de Ingreso: noviembre-2004
Ubicación: Galaxia 34, Cuadrante 972, Área 31
Mensajes: 174
Antigüedad: 19 años, 6 meses
Puntos: 2
Re: Gasto alto en memoria atacando bases mysql y archivo texto

... no será que esa tabla que abres con el RS es ENORME? Yo utilizo conexiones a BDD MySQL externas (no uso DSN, sino que apunto directo a la dirección del server) y nunca he tenido más problema que el que puedas tener al realizar consultas a una BDD de más de 3Gb..... vamos que tarda un poco en realizar la consulta, pero nada más....
__________________
Nunca esperes un mejor momento para abrir esa botella de vino...........nunca llega.

No hay vida después de MySQL
  #3 (permalink)  
Antiguo 25/10/2007, 15:04
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Gasto alto en memoria atacando bases mysql y archivo texto

Mis bases de datos ahora ocupan mucho espacio pero el programa siempre ha tirado de mucha memoria aún cuando no tenían nada o casi nada las tablas. Lo digo por que a veces falla y tengo que estar a mano viendo el problema. Y claro cuando lanzo el programa a ejecutarse para hacer pruebas mi ordenador se queda inutilizable.
  #4 (permalink)  
Antiguo 26/10/2007, 01:19
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Gasto alto en memoria atacando bases mysql y archivo texto

A ver, he echado un vistazo a las bases de datos y tengo en total unos 14 campos varchar de 200 caracteres. ¿Puede influir esto en el gasto de memoria?

Un saludo.
  #5 (permalink)  
Antiguo 27/10/2007, 03:37
 
Fecha de Ingreso: abril-2007
Mensajes: 187
Antigüedad: 17 años
Puntos: 1
Re: Gasto alto en memoria atacando bases mysql y archivo texto

Todo influye a la hora de consumir recursos, no es lo mismo un campo Byte que un campo VarChar(200) pero no creo que sea ese tu problema.

Pero como comenta el compañero Laforge si la tabla es muy grande y los campos no están bien estructurados la consulta puede demorarse algunos segundos pero no desesperes y si puedes no cargues toda la tabla, carga solo lo que necesite el usuario.

Tampoco pones mucho code para que veamos si la carga es correcta desde el principio de la aplicación.

Un saludo.
  #6 (permalink)  
Antiguo 29/10/2007, 11:49
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Re: Gasto alto en memoria atacando bases mysql y archivo texto

Cita:
Iniciado por mmanzano Ver Mensaje
Hola:

He realizado un programa en visual basic que crea 4 recordsets a una base de datos mysql a través de un dsn para escribir en ellas. Las conexiones son del tipo:

Código:
Set CONEXION = New Connection
CONEXION.CursorLocation = adUseClient
CONEXION.Open "DSN=nombre;uid=usuario;pwd=password;"

Dim REC1 As ADODB.Recordset
Set REC1 = New Recordset
REC1.Open "tabla1", CONEXION, adOpenStatic, adLockOptimistic
Tengo la sensación de que algo falla al abrir las conexiones ya que cuando se abren el sistema pide más memoria. Llega a usar aproximadamente 1'5 GB de maemoria (haciendo uso de la memoria virtual, claro).

El proceso que sigue a esto es copiar un fichero de más de 100 MB en otro con la instruccion FileCopy. Una vez hecho esto se procesa leyendo linea a linea con Line Input #log, linea e incorporando los datos en la base de datos.

No sé si estoy haciendo algo mal pues me parece excesivo el uso de memoria. Si no veís nada raro hasta aquí puedo daros más información.
En lo personal lo que yo haría es colocar un top a la consulta para poder obtener únicamente el numero de registros al abrir la tabla, para que esto no te devuelva la data en bruto, también algo que debes de hacer es quitar los campos que no usas.

por ejemplo

Select top 10 id_empleado,nombre_empleado from Tbl_empleados

haciendo una consulta un tanto mucho más rápida que la inicial, y para guardar no tenes la necesidad de abrir un recordset lo podes hacer directamente desde la conexión de la base de datos..

Db.execute "Insert into Tbl_empleados values(100,'Juan Perez')"

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #7 (permalink)  
Antiguo 30/10/2007, 04:11
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 0
Sonrisa Re: Gasto alto en memoria atacando bases mysql y archivo texto

Me parece que poco a poco voy teniendo las cosas más claras. La verdad es que no había pensado en todo lo que estaís argumentando pero tiene bastante sentido.

Por ahí arriba me han pedido que coloque más código para ver que puede estar fallando:

Para insertar uso:

Código:
tabla1_rec.AddNew
tabla1_rec!fecha = fecha(cortarcampo(linea, ",", 1))
tabla1_rec!hora = hora(cortarcampo(linea, ",", 1))
tabla1_rec!local = cortarcampo(linea, ",", 2)
tabla1_rec!idlog = cortarcampo(linea, ",", 7)
tabla1_rec!serie = cortarcampo(linea, ",", 11)
tabla1_rec!iporigen = cortarcampo(linea, ",", 14)
tabla1_rec!puertoorigen = cortarcampo(linea, ",", 15)
tabla1_rec!ipdestino = cortarcampo(linea, ",", 16)
tabla1_rec!puertodestino = cortarcampo(linea, ",", 17)
tabla1_rec!idcat = 0
tabla1_rec!categoria = "Filtrado manual"
tabla1_rec!dominio = cortarcampo(linea, ",", 19)
tabla1_rec!estado = cortarcampo(linea, ",", 21)
tabla1_rec!mensaje = cortarcampo(linea, ",", 22)
tabla1_rec.Update
Por eso veo díficil usar un inser into aunque no descabellado, es más lo considero una buena idea.

Un saludo.
  #8 (permalink)  
Antiguo 30/10/2007, 11:02
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Re: Gasto alto en memoria atacando bases mysql y archivo texto

Cita:
Iniciado por mmanzano Ver Mensaje
Me parece que poco a poco voy teniendo las cosas más claras. La verdad es que no había pensado en todo lo que estaís argumentando pero tiene bastante sentido.

Por ahí arriba me han pedido que coloque más código para ver que puede estar fallando:

Para insertar uso:

Código:
tabla1_rec.AddNew
tabla1_rec!fecha = fecha(cortarcampo(linea, ",", 1))
tabla1_rec!hora = hora(cortarcampo(linea, ",", 1))
tabla1_rec!local = cortarcampo(linea, ",", 2)
tabla1_rec!idlog = cortarcampo(linea, ",", 7)
tabla1_rec!serie = cortarcampo(linea, ",", 11)
tabla1_rec!iporigen = cortarcampo(linea, ",", 14)
tabla1_rec!puertoorigen = cortarcampo(linea, ",", 15)
tabla1_rec!ipdestino = cortarcampo(linea, ",", 16)
tabla1_rec!puertodestino = cortarcampo(linea, ",", 17)
tabla1_rec!idcat = 0
tabla1_rec!categoria = "Filtrado manual"
tabla1_rec!dominio = cortarcampo(linea, ",", 19)
tabla1_rec!estado = cortarcampo(linea, ",", 21)
tabla1_rec!mensaje = cortarcampo(linea, ",", 22)
tabla1_rec.Update
Por eso veo díficil usar un inser into aunque no descabellado, es más lo considero una buena idea.

Un saludo.
justamente así lo hacía yo.. en una aplicación, y lo cambié al insert into y me funciónó de mil maravillas...

pero lo podes hacer como te describí arriba..

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #9 (permalink)  
Antiguo 30/10/2007, 12:21
 
Fecha de Ingreso: abril-2007
Mensajes: 187
Antigüedad: 17 años
Puntos: 1
Re: Gasto alto en memoria atacando bases mysql y archivo texto

Pues yo lo recomiendo encarecidamente ya que la velocidad es incomparable.

Un saludo.
  #10 (permalink)  
Antiguo 30/10/2007, 15:39
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Gasto alto en memoria atacando bases mysql y archivo texto

pues tomo nota.... intentaré hacerlo así cuando tenga ratos libres XD

Muchisimas gracias por vuestra ayuda. Me da cosa no haber colaborado con respuestas en otros foros pero es que son mogollón de mensajes al cabo del dia... creo que lo mejor será buscar un foro donde me adapte bien e intentar ayudar en ese foro sólo.

Lo intentaré.
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 17:20.