![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
oParent - это DisplayObjectContainer
oChild - это DisplayObject Что если вместо oParent.contains(oChild) использовать oChild.parent == oParent? По моему должно быстрее работать или нет? |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 93
|
Это немного разные вещи, но в любом случае oParent.contains(oChild) быстрее.
|
|
|||||
|
Цитата:
скорее всего в методе contains идет цикл по всем содержащимся объектам, и если объект найден возвращается true. oChild.parent == oParent - это обычное сравнение
__________________
я могу стать всем, если только захочу |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
contains рекурсивный.
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
Цитата:
Но так и не понял почему contains быстрее? Если он рекурсивный то он вообще должен быть очень медленным по сравнению oChild.parent == oParent Последний раз редактировалось il phoenix; 20.08.2009 в 10:34. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Он нативный потому что.
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
Все ясно, спасибо)
|
|
|||||
|
а если там сто тыщ миллионов объектов вложеных. он тоже быстрее будет? просто если он рекурсивный, значит зависимость логарифмическая, а у parent - линейная. значит при определенных условиях он обгонит contains.
хотя, это я так, мысли вслух.
__________________
я могу стать всем, если только захочу |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 93
|
Пора закончить спор.
mc2 находится в mc, изменение количества вложенных обьектов на результат практически не влияет. import flash.utils.getTimer; var time:Number = getTimer(); function runContainsTest():void { time = getTimer(); for(var i:Number=0;i<20000000;i++) { if(parentMc.contains(childMc)){ } } trace("ContainsTest: ", (getTimer()-time)); // 1530 } function runParentTest():void { time = getTimer(); for(var i:Number=0;i<20000000;i++) { if(childMc.parent == parentMc){ } } trace("ParentTest: ", (getTimer()-time)); // 1936 } var parentMc:MovieClip = mc; var childMc:MovieClip = mc.mc2; runContainsTest(); runParentTest(); |
|
|||||
|
стервочка (я мужик)
|
а никто не догадался, что contains писали не идиоты, и что там скорее всего точно такой же линейный алгоритм? по крайней мере, когда я писал дерево данных, у меня даже в мозгу ничего не передёрнулось, что бы сделать по другому.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|