![]() |
Как после компиляции выглядят ссылки на свойства
Всегда думал, что если в цикле обращаться к свойству композитносозданного объекта,
то лучше это значение сохранить в локальную переменную. Думал, что обратится к локальной переменной быстрее, чем к свойству, путь к которому состоит из нескольких ссылок. А начал проверять и все оказалось наоборот. Вот результаты при чтении - Код AS3:
Код AS3:
|
Я не совсем по теме, но мне бросилось в глаза то, что тест вы проводите в конструкторе и скорее всего в дебагплеере, а это совсем неправильный подход.
|
samana а Вы не подскажите, как правильно проводить?
Просто мне и показывали такой вариант и у других я видел подобное... |
Нужно просто делать в релиз плеере (результаты например выводить в текстовое поле). Время засекаете перед началом теста (в начале метода например или цикла), а не при создании свойства. И желательно тест проводить не один раз при запуске, а на enterFrame. И посмотреть средний результат.
|
Сделал так -
Код AS3:
Код AS3:
На "получить значение" - 5900 против 5000... |
Вот это номер! Нужно срочно Джексондунстану сказать.
|
>> На "присвоить значение" - 5350 локальная переменная, против 5000 свойства объекта.
померяй время 'пустого' цикла и будешь неожиданно удивлен, что эти 5000 ( а может случится, что и большеЖ) на него и уходят.. я не знаю наверное, но полагаю, что сегодняшние версии плеера достаточно оптимизированы для доступа к полям объектов, чтобы вручную здесь что-то выгадывать естественно, это не касается доступа к динамическим свойствам и акцессорам - там время на порядок больше и в этом случае сохранять в локальной переменной есть смысл |
Сделал тест на ентерфраме и всё вроде бы встало на свои места.
Чтение показывает одинаковое время, а запись вот в таком виде, даже вредит, что склоняет к правоте silin'a. И хочется ещё уточнить, какой из всех вариантов замера, по Вашему самый лучший, если он тут вообще есть? Код AS3:
Код AS3:
|
>>хочется ещё уточнить, какой из всех вариантов замера, по Вашему самый лучший
по мне так самый лучший это самый понятный, ну типа в цикле то, что интересует и все. а эти штуки с while внутри for или new TestSpeed(print) и прочие таймеры я что-то не могу разгадать Добавлено через 3 минуты Код AS3:
|
TestSpeed это класс, где скорость и замеряется, я его в отдельный вынес класс вынес и поставил таймер, только для того, чтобы дать плееру, как следует запустится. Если делаю, как в первом примере, то и разница такая же. А цикл в цикле сделал, потому что читал где-то про разницу работы кода в зависимости от кол-ва итераций. Типа, один и тот же код будет медленнее работать при 100 итераций и быстрее при 1 000 000. Но я тестирую код, который миллион не когда не увидит и хотелось бы точнее уточнить, как он на малых кол-вах итераций работает. Вот и пришлось цикл в цикле делать. А скаут, разницы во времени такую мизерную, как-будто не замечает, а я именно за неё и борюсь.
Код AS3:
|
Как это на вас похоже: взять совершенно разумную идею, соорудить к ней нелепый тест и гордо объявить во всеуслышание "черное" "белым" под еще более нелепым названием темы.
Не нужно иметь семи пядей во лбу и перечитать пол-интернета, чтобы понять элементарную вещь: обращение к свойсву объекта осуществляется через оператор "." (точка), к локальной переменной обращение идет напрямую. Что быстрее? |
>>А скаут, разницы во времени такую мизерную, как-будто не замечает, а я именно за неё и борюсь.
ну ясно, серьезный подход, прогрев плеера, вариативность циклов, внушает.. но, если простейший тест на милионах итераций показывает разницу, сопоставимую с точностью системного таймера, у меня, например, нет никаких сомнений, что ловить здесь нечего и еще не надо забывать, что на другом железе\ОС\плеере ситуация может оказаться совсем другой, вплоть до противоположной >>обращение к свойсву объекта осуществляется через оператор "." (точка), к локальной переменной обращение идет напрямую. Что быстрее? вроде бы напрямую должно быть быстрее, но почему-то тест (пост №9) этого не показывает а в стародавние времена, бывало показывал.. Ж) я склонен думать, что плеер научили это делать самому, а может и всегда так было и это миф такой.. |
Цитата:
Не буду говорить за всех, я не такой! Мне гордо заявлять, даже если бы и было, то я это сделал по скромному:D По этому мне даже смешно, когда на меня то троля нацепить хотят, то гордого заявляющего, то ещё чего-то. Из-за Вас я вообще уже боюсь темы создавать на форуме, и создавая их, уже трясусь от мыслей, что мой бан зависит от какой-то магнитной бури. Соорудил я к ней тест... да, но еслиб молчал, то во первых, так бы и пользовался нелепым тестом, а во вторых, если даже я делаю тест в релизе и без энтерфрейм, то результаты, как в самом начале. А что быстрее, я же вроде написал, что был уверен до сегодняшнего момента, что быстрее локальная. один из многих - Код AS3:
Код AS3:
И вот при таком раскладе, проще всего забыть о сохранении значения в локальную переменную, хотя бы при одной точки. И вот такие результаты через раз, то больше, то меньше. Добавлено через 5 минут Только хотел уже закрыть этот класс, но думаю дай ещё раз нажму с закрытым браузером, в котором флеш плеер с музыкой ( хоть и выключена )... Код AS3:
Наверное я такой глупый, что надо мной даже плеер смеется:D Добавлено через 11 минут И такие результаты даже если сделать класс из примера silin'a не динамическим ( это я уже на всякий случай попробовал, так-как не знаю как себя ведёт класс помеченный dynamic ). И ещё что бросается в глаза, что если разница есть с записью, то разница при чтении почти не когда не бывает в пользу локальных переменных. |
А можно еще разок прогнать релиз-билд недебаговым плеером.
|
Ну, вот заставь Akopalipsis'a б-гу молиться... весь лоб расшибет.
Код AS3:
Цитата:
|
| Часовой пояс GMT +4, время: 19:46. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.