Показать сообщение отдельно
Старый 11.11.2008, 20:35
AS3noob вне форума Посмотреть профиль Отправить личное сообщение для AS3noob Найти все сообщения от AS3noob
  № 26  
Ответить с цитированием
AS3noob

Регистрация: Nov 2008
Сообщений: 14
Firexel
Откуда взяться изменению скорости работы, если обе сущности - одно и то же?.. В конце концов, лично я пока не попробую, не поверю. Адобы еще в as2 писали о защите данных private, и что?

__etc
Да тест-то простецкий.
Делаем в библиотеке клип, в нем - прямоугольник, linkage class=test2, base class=flash.display.Sprite
Класс основного документа mainDoc

Код AS3:
package {
		import flash.display.Sprite; 
		import flash.system.System;
		import flash.display.Shape;
		import flash.utils.*;
 
		public class mainDoc extends Sprite { 
			public function mainDoc() {
				var bar:int = System.totalMemory;
				var baz:int = getTimer();
				trace ("memory: " + bar);
				for (var i=0; i<10000; i++) {
					var foo:test2 = new test2();
					this.addChild(foo);
					foo.x = foo.y = i;
				}
				trace ("memory: " + System.totalMemory + "\t\tdelta=" + (System.totalMemory-bar));
				trace ("time: " + (getTimer() - baz) + " ms");
			}
 
		}
}
Исполняем, замеряем. Потом то же самое, но у класса test2 (наш клип) base class = flash.display.MovieClip

У меня результаты такие:
Код:
flash.display.Sprite
memory: 6361088
memory: 17371136		delta=11010048
time: 5370 ms

flash.display.MovieClip
memory: 6369280
memory: 17534976		delta=11165696
time: 5325 ms

Разница: 155648b		15.5648 на объект
Ясное дело, что могут быть погрешности, связанные с выделением памяти страницами (мои опыты дают число 4 кб), но это несущественно.
15 байт - это вовсе не "много". Я сейчас проверяю предположение, что класс movieClip не "распался" на дерево классов, а остался целостным контейнером, в котором просто блокируются некие свойства, в стиле asSetPropFlags. Исходя из этой идеи, память на спрайты и память на мувики должна быть одинаковой. Полученная картина похожа на настоящую, 15 байт - заполненные свойства, которых "нет" у Sprite и которые поэтому пусты. Например, свойство name для объекта instance999 займет минимум 12 байтов, ну и так далее.

Впрочем, возможно подстава не "всеобщая", а только в том случае, когда объект делают по библиотечному, а не from scratch, например программа

Код AS3:
package {
		import flash.display.Sprite; 
		import flash.display.MovieClip;
		import flash.system.System;
		import flash.display.Shape;
		import flash.utils.*;
 
		public class mainDoc extends Sprite { 
			public function mainDoc() {
				var bar:int = System.totalMemory;
				var baz:int = getTimer();
				trace ("memory: " + bar);
				for (var i=0; i<10000; i++) {
					var foo:MovieClip = new MovieClip();
					foo.graphics.beginFill(0x00FFFF, 1);
					foo.graphics.drawRect(-50, -30, 100, 60);
					this.addChild(foo);
					foo.x = foo.y = i;
				}
				trace ("memory: " + System.totalMemory + "\t\tdelta=" + (System.totalMemory-bar));
				trace ("time: " + (getTimer() - baz) + " ms");
			}
 
		}
}
с тем же изменением (в строке var foo:MovieClip = new MovieClip(); меняем на Sprite) дает совсем другую картину:

Код:
Sprite
memory: 6385664
memory: 35979264		delta=29593600
time: 2924 ms

MovieClip
memory: 6385664
memory: 37036032		delta=30650368
time: 3047 ms


Разница: 1056768 b, на объект: 105.6768
Впрочем, у меня порой получалась и разница поменьше, 97-98 байтов.
Разница по времени незаметна и может определяться иными тормозами компа.
100 байт - это уже существенней, хотя все равно маловато. Очень маловато.


Последний раз редактировалось AS3noob; 11.11.2008 в 20:54.