Para recuperar el pequeño porcentaje que queda sin liberar cuando usas image.free (pequeño si es 1 imagen, pero se va acumulando) usa collectgarbage("collect").
La manera ideal de usarla es: liberar imágenes, sonidos y objetos 3D con sus funciones nativas, el resto de variables que no vas a usar igualarlas a nil y pasar collectgarbage (puedes desarrollar una función que lo haga por ti, no sé xD).
Y claro, el consejo de siempre: no cargues imágenes en vano, sólo las que se van a ver en la pantalla. Asimismo, cuando una imagen salga de la pantalla libérala ;)
Yo no sé qué manía con el collectgarbage todos... xD
El último eboot que circula por aquí lo hace automáticamente... cada X ciclos. Además si al cargar algo no pudiera, repite el collectgarbage internamente y vuelve a intentar cargar. O sea, por más que pongais collectgarbage, son redundantes.
Igualmente, aunque perdieras la variable, luadev la seguiría matando por tí al cabo del tiempo.
(Cuando digo perder digo: a = image.load(bla); a = true; perderíamos la referencia a la imagen y no podriamos liberarla... pero tranquilos, se hará en el proximo ciclo del colector de basura).
El colector de basura es configurable, pero viene con buenos valores por defecto.
El último eboot mejoró lo que no está escrito en temas de gestión de la memoria ram.
Para recuperar el pequeño
Para recuperar el pequeño porcentaje que queda sin liberar cuando usas image.free (pequeño si es 1 imagen, pero se va acumulando) usa collectgarbage("collect").
La manera ideal de usarla es: liberar imágenes, sonidos y objetos 3D con sus funciones nativas, el resto de variables que no vas a usar igualarlas a nil y pasar collectgarbage (puedes desarrollar una función que lo haga por ti, no sé xD).
Y claro, el consejo de siempre: no cargues imágenes en vano, sólo las que se van a ver en la pantalla. Asimismo, cuando una imagen salga de la pantalla libérala ;)
Yo no sé qué manía con el
Yo no sé qué manía con el collectgarbage todos... xD
El último eboot que circula por aquí lo hace automáticamente... cada X ciclos. Además si al cargar algo no pudiera, repite el collectgarbage internamente y vuelve a intentar cargar. O sea, por más que pongais collectgarbage, son redundantes.
Un saludop.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Si, eso lo sé. Lo que no me
Si, eso lo sé. Lo que no me queda claro es cada cuánto lo hace, así que en casos extremos mejor darle un empujoncito xD
By Jorge_97
Entiendo... Pero me temo que si le quitas a mi aplicacion collectgarbage() no funciona Xd.
Al pasar 5 minutos abriendo imágenes y tal se funde xD
Salu2
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
realmente lo probaste con el
realmente lo probaste con el último eboot eso? si es así, me tendré que fiar de ti, pero tengo el código delante, y luadev lo hace por tí.
while ( retries < 3 ) { image = .... if (!image) { lua_gc(L,LUA_GCCOLLECT,0); } else { break; } retries++; }
Igualmente, aunque perdieras la variable, luadev la seguiría matando por tí al cabo del tiempo.
(Cuando digo perder digo: a = image.load(bla); a = true; perderíamos la referencia a la imagen y no podriamos liberarla... pero tranquilos, se hará en el proximo ciclo del colector de basura).
El colector de basura es configurable, pero viene con buenos valores por defecto.
El último eboot mejoró lo que no está escrito en temas de gestión de la memoria ram.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
By Jorge_97
No te fíes de mí...
Fíate de los TESTER que me reportaron el error y yo lo solucioné poniendo un collectgarbage()...
De todos modos ya está solucionado y quizá eso sea para hacerlo poco a poco... cada cierto tiempo.
Salu2
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
Y una pregunta que me corroe desde hace muuucho...
Si haces un "superborrado" como mencionas en tu comentario, luego puedes volver a cargar la misma imagen usando la misma variable anterior??
Y por cierto, donde se debe hacer el image.free(), en un while o fuera??
Emmm....
Claro que la puedes cargar de nuevo.
image.free debes usarlo en una sentencia o un punto donde no vuelva a leerse a menos que la vuelvas a cargar
Si lo hicieras en el while a la primera lectura todo OK, pero a la segunda dira que falta la imagen a borrar.
Entiendo, y si después del image.free()
Entiendo, y si después del image.free() hago un break?
pues se saldra del bucle.
...
By Jorge_97
Sí, lo he hecho todo como dices...
Pero no lo hice antes porque pensaba que free() liberaba la totalidad de un archivo.
Gracias a las PSP's fat me he dado cuenta que no es así.
Salu2 a todos
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
Gracias
a la PSP de mi hermano, ¿esa es la "nueva forma de cargar" que te pregunté?
By Jorge_97
Si xD
Gracias a ti.
Si supongo que será eso a lo que te refieres
Salu2 amigo