Показать сообщение отдельно
Старый 27.11.2008, 15:54
mikleb вне форума Посмотреть профиль Отправить личное сообщение для mikleb Найти все сообщения от mikleb
  № 3  
Ответить с цитированием
mikleb

Регистрация: Feb 2008
Сообщений: 111
2__etc
Он ведет себя так как будто эта память занята.
Вот код проверки этого:
Код:
package
{
	import flash.display.SpreadMethod;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.system.System;
	import flash.utils.Dictionary;
	import flash.utils.getTimer;
	
	public class Main extends flash.display.Sprite
	{
		private var d:Array;
		
		public function f(n:int):void
		{
			var s:Sprite;
			var a:Array = new Array();
			for (var i:int = 0; i < n; ++i)
			{
				s = new Sprite();
				a.push(s);
			}
			
		}
		private function efl(e:Event):void
		{
			trace(System.totalMemory);
			f(1000);
		}
		public function Main():void
		{
			var n:int = 10000000;
			var i:int;
		
			d = new Array();
			for (i = 0; i < n; ++i)
				d[i] = 0;

			trace(System.totalMemory);
			for (i = 0; i < n; ++i)
			{
				d.pop();
			}
			trace(System.totalMemory);
			stage.addEventListener(Event.ENTER_FRAME, efl);
		}
	}
}
Тем более судя по тормазнутости работы Array и по тому что ключи могут быть не только целые, Array скорее всего реалзиован в виде какого то сбалансировнного дерева, так что простым GC тут не обойтись - нужна перестройка дерева.


Последний раз редактировалось mikleb; 27.11.2008 в 15:58.