Foros del Web » Programando para Internet » PHP »

Memory usage

Estas en el tema de Memory usage en el foro de PHP en Foros del Web. Hola. Tengo un script en el que creo un array con muchos objetos (miles) de una clase determinada, que cogen su información de la base ...
  #1 (permalink)  
Antiguo 09/07/2008, 05:57
 
Fecha de Ingreso: diciembre-2004
Mensajes: 20
Antigüedad: 19 años, 4 meses
Puntos: 0
Memory usage

Hola.

Tengo un script en el que creo un array con muchos objetos (miles) de una clase determinada, que cogen su información de la base de datos. Hago esto porque necesito realizar muchos cálculos con ellos, actualizar valores, etc, y trabajando en los objetos directamente, ahorro un gran número de accesos de la base de datos, teniendo ahora tan solo que acceder a la hora de crear el array, y a la hora de finalizar, cuando updateo la base de datos con los valores que tienen los objetos.

Todo funciona correctamente, pero el problema viene con el uso de memoria. Mi programa llama a ese script N veces (son N países), pero cuando llega a la mitad, da un error el allocate por estar usando demasiada memoria. El caso es que cada array es distinto en cada país, por lo que puedo destruir el array tras finalizar cada país. Y eso hago, pero aunque utilizo unset($array) para destruirlo al final del script, sigo recibiendo el mismo error.




Probé a aumentar el máximo de memoria con el ini_set, pero aun poniéndolo a 512M , sigo recibiendo el error.

Si intento mostrar por pantalla el array despues de hacer el unset, me dice que no existe. Sin embargo sigo recibiendo el error de máximo de memoria excedido, así que en algun lado tiene que estar.
Además del unset(array), probé a igualarlo a NULL, pero hace exactamente lo mismo.


Alguna sugerencia compañeros?
Gracias anticipadas.
  #2 (permalink)  
Antiguo 09/07/2008, 07:48
Avatar de tulises16  
Fecha de Ingreso: diciembre-2003
Ubicación: La Plata, Argentina
Mensajes: 92
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Memory usage

No te entiendo exactamente, supongo que podrias mostrar algo de codigo para orientarnos, de cualquier forma si es una clase trata de utilizar variables privadas y fijate en donde pones el unset, porque no es lo mismo en un lugar que en otro, me refiero a que si el unset esta dentro de una funcion solo elimina el valor de la variable dentro de la funcion.
__________________
Ulises
  #3 (permalink)  
Antiguo 10/07/2008, 02:23
 
Fecha de Ingreso: diciembre-2004
Mensajes: 20
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Memory usage

Ya, el unset lo pongo en la misma función en la que creo el array. De hecho, si despues del unset pruebo a hacer print_r(array), me dice que no existe. Aun así, sigo recibiendo el error de la memoria, como si esta siguiera ocupada.
Así que parece que el unset no libera la memoria y necesito algo que la libere.
  #4 (permalink)  
Antiguo 10/07/2008, 08:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Memory usage

Mmm puede que tu uso de memoria venga por otro lado, te recomiendo usar un debugger para que ejecutes tu código paso a paso, así podrás ver como se va comportando el uso de tu memoria.

Saludos.
  #5 (permalink)  
Antiguo 14/07/2008, 02:56
 
Fecha de Ingreso: diciembre-2004
Mensajes: 20
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Memory usage

Gracias por las respuestas, pero al final el problema se solucionó viendo los posibles argumentos para lanzar un cronjob. Dejo la solución por si alguien tiene el mismo problema alguna vez.

Al parecer, el cronjob utiliza su propia configuración para el php.ini, por lo que el ini_set() no funciona correctamente. Sin embargo, hay una opción para utilizar tu propio archivo php.ini , con la configuración que desees. Utilizando eso pude poner el límite de memoria más alto, y hacer funcionar mi script.

Un saludo!
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 20:26.