Недавно перед мною стала задача вычисления битовых масок для определения симметрии составных частей юнита. Нужно это мне потому что я пишу движок для игры (RTS).
Многие вполне обоснованно считают что предварительная оптимизация это зло, я же задумался о том сколько я смогу выиграть производительности если вместо вызова встроенной функции использую простое выражение, но простое выражение не вышло, возникло несоответствие типов и пришлось вставить функцию конвертации типа. Код здесь. https://gist.github.com/anonymous/8122017
результаты показали:
время с использованием встроеных функций 4,21064499998465
время с использованием уравнения в коде 7,62681200006045
Оптимизация показала отрицательный эффект. Приблизительно в 2 раза.
Dim a As Integer
Dim a2 As Integer
Dim TimeH As Float
Dim TimeE As Float
Dim r As Float
Dim i As Integer
Dim b As Boolean
Dim i2 As Integer
Dim f As Integer
Dim f2 As Float
TimeH = Timer ' время начала теста
For a = 1 To 1000000
For a2 = 1 To 15
' используем встроенную функцию Gambas runtime
b = BTst(a, a2 - 1)
Next
Next
TimeE = Timer
r = TimeE - TimeH ' вычисление разницы времени
Print "время с использованием встроеных функций " & Str(r)
TimeH = Timer ' время начала теста
For a = 1 To 1000000
For f2 = 1 To 15
'i2 = (2 ^ (a2 - 1)) ' необходимо из за ошибки несоответсвия типов
b = a And CInteger(2 ^ (a2 - 1))
Next
Next
TimeE = Timer
r = TimeE - TimeH ' вычисление разницы времени
Print "время с использованием уравнения в коде " & Str(r)