<code>try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}
// the GC will perform a full mark/sweep on the second call.</code>
Acabo de probarlo y funciona, no me preguntéis por qué, pero funciona!!!! La curva de memoria disponible,de la que estamos hablando, parece ahora un encefalograma plano :-)))). Basta con llamar a este código después de eliminar las instancias que no deseemos y se lanza el GC, liberando memoria.
Un saludo, y de nuevo, muchas gracias :-)
No es tan raro encontrar ordenadores con menos de 256KB de RAM, y esta cantidad de memoria se puede llenar ràpidamente con sólo poner a true el cacheAsBitmap de todos los movieClip que estemos utilizando.
tpmmds, como advierte el post original, yo lo utilizaría con mucho cuidado. Puede que en una futura versión del player simplemente deje de funcionar (probable) o que provoque un crash total (menos probable).
Y yo creo que estos "encuentros casuales" vienen directamente desde Adobe cuando uno de los mega-frikis pregunta a alguien que conoce allí. Aunque puede ser mi vena conspiranoica : D
El garbage, que yo sepa, no te va a reescribir un código que sature de variables que no borras. Lo que hace es gestionar como se libera la memoria de las variables que precisamente si borras. (creo)
EDIT: Me veo al garbage collector como cabeza de turco para explicar problemas, como en su día lo fue el proxy cache:
Cliente: La pantalla muestra un undefined!
Desarrolador: Eso es que no se ha borrado el garbage.
De hecho cuando leí los artículos me cagué bastante porque pinta el escenario muy negro en plan: "hay que tener infinito cuidado o vamos a colgar los equipos de los usuarios".
Tiempo después parece que la Tierra sigue girando y que el desarrollo de AS3 no se ha vuelto un infierno. Aunque el otro día estaba haciendo mi primera aplicacioncilla y me di unos cuantos cabezazos ¬¬
Habeis probado el BitmapData.dispose() ? en principio, y me consta, destruye el bmp, y libera la memoria ocupada...
Por otro lado, y esto es solo con BitmapData, si excedes la capacidad de la ram, Flash ya no creara mas BitmapDatas, y la instancia evaluara falso (creo recordar, como cuando creas uno mayor a 2880 pixeles de ancho o alto)... podeis probar un onEnterFrame que vaya metiendo bmps grandes a un array...
Otro truquillo es no usar bmps transparentes cuando se pueda... estos ocupan casi el doble que los opacos ;)
Sobre los entornos de trabajo, uso Flash CS3 (btt hasta la polla, pero es q ademas diseño) y FlashDevelop para XMLs y clases (SI! toy haciendo alguna q otra clase de vez en cuando ^^), q mola mucho lo del ctrl+enter conectao al IDE :P
tpmmds, como advierte el post original, yo lo utilizaría con mucho cuidado. Puede que en una futura versión del player simplemente deje de funcionar (probable) o que provoque un crash total (menos probable).
Totalmente de acuerdo, como he comentado más arriba, tengo la sensación de que este truco lo descubrió un programador una noche de insomnio que estaba probando una LocalConnection entre dos swf's :-). Seguro!!!
Pero bueno, habrá que utilizarla para forzar la limpieza de la memoria en aquellas aplicaciones que la llenamos bastante, a la espera de que Adobe nos de una solución mejor. Y seguro que en la nueva actualización de Flash player deja de funcionar: tiene pinta de ser un bug ya que si quitas la segunda LocalConnection() del try/catch no se lanza el GC.
Un saludo.
P.D.: Perdonad mi mala redacción, escribo desde un portátil de hace 8 años, al que no le funcionan la mitad de las teclas.
Habeis probado el BitmapData.dispose() ? en principio, y me consta, destruye el bmp, y libera la memoria ocupada...
Si, ahora, en la nueva versión del puzzle que estoy haciendo, recorto sólo el trozo de imagen que abarca la ficha y no se me llena tanto la RAM. Antes lo hacía a lo "bestia": duplicaba todo el Bitmap y lo enmascaraba; malos hábitos adquiridos tras tantos años de Flash :-)
tpmmds
Zárate
<code>try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}
// the GC will perform a full mark/sweep on the second call.</code>
Acabo de probarlo y funciona, no me preguntéis por qué, pero funciona!!!! La curva de memoria disponible,de la que estamos hablando, parece ahora un encefalograma plano :-)))). Basta con llamar a este código después de eliminar las instancias que no deseemos y se lanza el GC, liberando memoria.
Un saludo, y de nuevo, muchas gracias :-)
elSuricatoRojo
tpmmds
No es tan raro encontrar ordenadores con menos de 256KB de RAM, y esta cantidad de memoria se puede llenar ràpidamente con sólo poner a true el cacheAsBitmap de todos los movieClip que estemos utilizando.
Como dirían en IT Crowd "Are you from the past?"
(Es una coña :-) Entiendo que son Mb)
juandelgado
tpmmds, como advierte el post original, yo lo utilizaría con mucho cuidado. Puede que en una futura versión del player simplemente deje de funcionar (probable) o que provoque un crash total (menos probable).
Y yo creo que estos "encuentros casuales" vienen directamente desde Adobe cuando uno de los mega-frikis pregunta a alguien que conoce allí. Aunque puede ser mi vena conspiranoica : D
Athomix
Que cosas sabe Zárate.
Una vez hice una función en C que hacía un new variable con cada movimiento del mouse pero nunca un delete, en unos minutos quedaba colgado todo.
Pensaba que la misión del Garbage Collector era evitar este tipo de errores, no?
elSuricatoRojo
El garbage, que yo sepa, no te va a reescribir un código que sature de variables que no borras. Lo que hace es gestionar como se libera la memoria de las variables que precisamente si borras. (creo)
EDIT: Me veo al garbage collector como cabeza de turco para explicar problemas, como en su día lo fue el proxy cache:
Cliente: La pantalla muestra un undefined!
Desarrolador: Eso es que no se ha borrado el garbage.
Athomix
Pues eso, no hay cosa más estúpida que borrar una variable y que la borre cuando le salga de los coj.... :D
juandelgado
Athomix
Que cosas sabe Zárate
Que cosas lee Zárate : )
De hecho cuando leí los artículos me cagué bastante porque pinta el escenario muy negro en plan: "hay que tener infinito cuidado o vamos a colgar los equipos de los usuarios".
Tiempo después parece que la Tierra sigue girando y que el desarrollo de AS3 no se ha vuelto un infierno. Aunque el otro día estaba haciendo mi primera aplicacioncilla y me di unos cuantos cabezazos ¬¬
Ea!
Ventd'Aval
Buenas,
Habeis probado el BitmapData.dispose() ? en principio, y me consta, destruye el bmp, y libera la memoria ocupada...
Por otro lado, y esto es solo con BitmapData, si excedes la capacidad de la ram, Flash ya no creara mas BitmapDatas, y la instancia evaluara falso (creo recordar, como cuando creas uno mayor a 2880 pixeles de ancho o alto)... podeis probar un onEnterFrame que vaya metiendo bmps grandes a un array...
Otro truquillo es no usar bmps transparentes cuando se pueda... estos ocupan casi el doble que los opacos ;)
Sobre los entornos de trabajo, uso Flash CS3 (btt hasta la polla, pero es q ademas diseño) y FlashDevelop para XMLs y clases (SI! toy haciendo alguna q otra clase de vez en cuando ^^), q mola mucho lo del ctrl+enter conectao al IDE :P
Saludos :)
tpmmds
Zárate
tpmmds, como advierte el post original, yo lo utilizaría con mucho cuidado. Puede que en una futura versión del player simplemente deje de funcionar (probable) o que provoque un crash total (menos probable).
Totalmente de acuerdo, como he comentado más arriba, tengo la sensación de que este truco lo descubrió un programador una noche de insomnio que estaba probando una LocalConnection entre dos swf's :-). Seguro!!!
Pero bueno, habrá que utilizarla para forzar la limpieza de la memoria en aquellas aplicaciones que la llenamos bastante, a la espera de que Adobe nos de una solución mejor. Y seguro que en la nueva actualización de Flash player deja de funcionar: tiene pinta de ser un bug ya que si quitas la segunda LocalConnection() del try/catch no se lanza el GC.
Un saludo.
P.D.: Perdonad mi mala redacción, escribo desde un portátil de hace 8 años, al que no le funcionan la mitad de las teclas.
tpmmds
Ventd'Aval
Buenas,
Habeis probado el BitmapData.dispose() ? en principio, y me consta, destruye el bmp, y libera la memoria ocupada...
Si, ahora, en la nueva versión del puzzle que estoy haciendo, recorto sólo el trozo de imagen que abarca la ficha y no se me llena tanto la RAM. Antes lo hacía a lo "bestia": duplicaba todo el Bitmap y lo enmascaraba; malos hábitos adquiridos tras tantos años de Flash :-)
Athomix
Zárate
<div class="quote">
Athomix
<blockquote>Que cosas sabe Zárate</blockquote>
</div>
Que cosas lee Zárate : )
Ea!
Pues vas a tener que cambiarle el título a loqueyosede.com :D