![]() |
|
||||||||||
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Простой тест. package { /* IMPORT *///{ / import flash.display.*; import flash.events.*; //} public class TestDispose extends Sprite { /* - VAR PRIVATE *///{ / private var _bitmap:Bitmap = null; //} /* * CONSTRUCTOR * *///{ / public function TestDispose () { _bitmap = new Bitmap () addChild (_bitmap) stage.addEventListener (MouseEvent.CLICK, onClick) } //} /* EVENT *///{ / private function onClick (event:MouseEvent):void { if (_bitmap.bitmapData == null) { _bitmap.bitmapData = new BitmapData (3000, 3000); trace ('new'); } else { _bitmap.bitmapData.dispose (); trace ('dispose'); } } //} } } При new 40,8 кб При dispose 5,6 кб Можно воспользоваться System.totalMemory вместо профайлера, результат будет тот же. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Такой тест не проводил.
А вот если сделать так: package { import flash.display.Bitmap; import flash.display.Sprite; public class Test extends Sprite { [Embed(source = "image.png")] private var Img:Class; private var _image:Bitmap = new Img as Bitmap; public function Test() { addChild(_image); } public function clear():void { removeChild(_image); _image.bitmapData.dispose(); } } } Однако, если сделать так: package { import flash.display.Bitmap; import flash.display.Sprite; public class Test extends Sprite { [Embed(source = "image.png")] private var Img:Class; private var _image:Bitmap = new Img as Bitmap; public function Test() { addChild(_image); } public function clear():void { removeChild(_image); _image.bitmapData.dispose(); _image = null; } } } |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
package { /* IMPORT *///{ / import flash.display.*; import flash.events.*; import flash.system.System; //} public class TestDispose extends Sprite { /* CONSTANT *///{ / [Embed(source='wpapers.jpg')]private var Img:Class; private var _bitmap:Bitmap = null; //} /* * CONSTRUCTOR * *///{ / public function TestDispose () { stage.addEventListener (MouseEvent.CLICK, onClick) } //} /* EVENT *///{ / private function onClick (event:MouseEvent):void { if (_bitmap == null) { _bitmap = new Img as Bitmap; addChild (_bitmap); trace (System.totalMemory); } else { removeChild (_bitmap) _bitmap.bitmapData.dispose (); trace (System.totalMemory); } } //} } } Первый клик: 18'034'688 Второй клик: 6'979'584 Хотя ссылку не обнулял. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Значит во флешдевелоп профайлер не обновляет данные о потребляемой картинкой памяти, пока объект полностью не удалится, или у меня что-то в нем не правльно настроено. Хз. Пару месяцев назад мне это просто выносило мозг, даже тему тут создавал. Но когда стал занулять ссылки, все быстренько стало подчищаться.
|
|
|||||
|
goodguy, не надо путать теплое с мягким. Bitmap != BitmapData. В вашем случае BitmapData уже уничтожена, а Bitmap жив, на него есть ссылки, ему можно приатачить новый BitmapData.
__________________
משיח לא בא משיח גם לא מטלפן |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|