понедельник, 21 сентября 2009 г.

Странности больших чисел

Поспорили тут недавно с товарищем. Товарищ - жОский и многоопытный подмобило-геймо-писатель. Так сложилось, что посадили его в срочном порядке за флекс. И поставили задачу: отрисовывать 50.000 статических объектов. И он, ничтоже сумняшися, забубенил это самым ядерным способом. Понаписал кучу своих (а по сути абстрактно-платформенных) классов, которые в итоге всё дампят на главную битмапку. Я не сомневался что это будет работать быстро, я засомневался в целесообразности этого подхода относительно шейпов.(ну мы же цивилизованные люди, специально же для нас делали объектную модель и всё такое)

Стал ставить эксперименты. Флекс, аппликейшин, спрайт-родитель на весь экран и 50.000 дочерних шейпов. mouseChildren=false. Всё умерло. Машина - Windows7,8гигов памяти, 4 ядра. Заработало всё где-то на 30.000 шейпов. Добавил возможность драгать по экрану родительский спрайт. Умирает как только начинаешь драгать.Т.е. если тащить ме-е-едленно, то фпс приличный. А если дёргать резко, когда мышка постоянно над разными местами этого "борща" из шейпов скачет - всё, пиши пропало. Ставлю 10.000 шейпов - всё опять летает, с драгом. 57 Fps (из 60 возможных). Сделал 4 родительских спрайта, каждый на четверть экрана, в каждом по 10.000 шейпов. Т.е. в сумме на экране 40.000 шейпов. 57 fps.

Там в плеере где-то вшита константа? :))) Или алгоритм такой, что до 10.000 чайлдов он работает быстро-быстро, а потом, резко так, включается ЭКСПОНЕНТА? или чо аще? а?

3 комментария:

Анонимный комментирует...

Ну так вобщем-то все логично, в первом случае плеер вынужден работать со всеми 40000 объектами сразу, а во-втором он просто пробегается по 4 спрайтам, находит активный а там уже работает только с 10000. Это же дерево, в поиске оно рулит над списком)

Buran комментирует...

М-м-м, да я с этим полностью согласен. Но. Что такого там, в недрах, происходит, из-за чего увеличение кол-ва объектов в 4 раза приводит к падению производительности в более чем 10 раз? При этом наблюдается совершенно чёткая ступенька в районе вот этих самих 10.000 объектов.

Olewka комментирует...

в волешбый момент 10240 объектов (для круглого счета))... гипотеза флеш начинает пытаться сам делить список на 2... например хотя так говорить трудно - 10к точек 3х мерного пространства или 10к плоскостей с вектром растром или 10к интов в аррее... дайте сорс мжно будет более дитально изучить вопрос составить статистический граф в зависемости от того что в спрайте лежит... возможно оф топ но http://blog.efvincent.com/concurrency-optimization-silverlight/
классное сравнение 3д возможностей Хтмл5 Флеша и 2х версий в силвере. от себя добавлю версию с алхимией - http://www.unitzeroone.com/blog/2009/03/18/flash-10-massive-amounts-of-3d-particles-with-alchemy-source-included/ там с 300к играют...