Показать сообщение отдельно
Старый 21.04.2012, 23:01   #1
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Оптимизированный перебор Type'а

Обратил внимание что использование For Each с проверкой всех полей, при большом количестве записей начинает напрягать проц. Написал выход.

1. Обычный перебор (при 15к записей 1 кадр высчитавает 30-31 мс)
For grass.grass=Each grass
	grass\timer=grass\timer+time
	If grass\growed=False Then
	grass\scale=grassMaxScale*(grass\timer/Float(grassIntervalGrow))
	ScaleSprite grass\entity,grass\scale,grass\scale
	PositionEntity grass\entity,EntityX(grass\entity),grass\y+grass\scale,EntityZ(grass\entity)
	If grass\scale>grassMaxScale Then grass\growed=True 
	EndIf 
Next
2. Мой вариант перебора (при 15к записей 1 кадр высчитавает 16-17 мс)
Function GrassUpdate()
For grass.grass=Each grass
	grass\timer=grass\timer+time
Next 
End Function 

Function GrassCheck(n)
For i=1 To n
	If Not grassHandle Then
	  grassHead.grass=First grass
	  grassHandle=Handle(grassHead)
	Else
	  grass.grass=Object.grass(grassHandle)
	  If grass\growed=False Then
	  grass\scale=grassMaxScale*(grass\timer/Float(grassIntervalGrow))
	  ScaleSprite grass\entity,grass\scale,grass\scale
  	  PositionEntity grass\entity,EntityX(grass\entity),grass\y+grass\scale,EntityZ(grass\entity)
	  If grass\scale>grassMaxScale Then grass\growed=True 
	EndIf 
	grass.grass=After grass
	grassHandle=Handle(grass)
	EndIf
Next 
End Function
В кратце смысл такой, если у вас будет несколько тысяч записей, то можно одной функцией применять изменения к "моментальным полям" всех записей (т.е. те поля, которые необходимо изменять каждый кадр), а остальные поля (которые не требуется проверять моментально) проверять в n-ом количестве, например не сразу 2000 записей за кадр, а по 100 записей.
Посмотрите пожалуста, у меня в другом коде этот метод не работает, хотя должно было работать после копи-паст.
Поделитесь какие тут недостатки

Прикреплены примеры
Вложения
Тип файла: rar testSprite.rar (55.0 Кб, 442 просмотров)
__________________
(Offline)
 
Ответить с цитированием