Методы оптимизации
Итак, что же такое оптимизация? А это просто изменение исходного кода программы / добавление новых модулей с целью повышения её быстродействия. Рассмотрим конкретный пример:
Код:
1) "Отброс невозможных вариантов" Нетрудно заметить, что при нажатии кнопки мыши мы можем выделить только одного юнита, значим мы можем изменить код функции так: Код:
2)"Задание условий выполнения" Так же можно заметить, что при нажатии кнорки мыши мы не всегда попадаем в юнита, а значит поставить проверку попали ли мы вообще в юнита? Изменим код так: Код:
Код:
Function CreateUnit() |
Re: Методы оптимизации
ето очень и очень конкретный пример оптимизации
|
Методы оптимизации
Конечно, рассмотренные выше методы не являются исчерпывающими. Рассмотрим ещё несколько видов оптимизации:
1) "Замена условий формулой" Это просто замена нескольких IF одной формулой. Вот основные виды: а)"Переключатель двух состояний" То есть просто переменная, которая может принимать значения 1 или 0 : Код:
If KeyHit(57) N=1-N Код:
If KeyHit(57) N=Not(N) б)"Преключатель N состояний" Это переменная, которая может принимать значения 0,1...N : Код:
If KeyHit(57) K=(K+1) Mod N Часто используется для переменных, которые возратают (или уменьшаются) только до какого-то определенного значения (например для скорости): Код:
Speed=Speed + (1 And Speed < 2)*.5 Используется реже, например здесь: вместо Код:
If EntityPitch(cam)<75 And EntityPitch(cam)>-75 Then Код:
If Abs(EntityPitch(cam))<75 Then 2)"Исключение медленных операций" Например, если вам надо определить расстояние между точками в 2D ( в 3D всегда исрользуйте EntityDistance - эта команда значительно быстрее любых подсчетов через координаты!), вы наверняка используете что-то вроде этого: Код:
Код:
P.S. Ну вот вроде всеB) ! Если знаете что-то еще, добавляйте. |
Re: Методы оптимизации
про If KeyHit(57) K=(K+1) Mod N незнал :)
пасибки :) |
Re: Методы оптимизации
а мгновенный доступ к елементу типа без перебора ?
Object -есть такая фишка. Цитата:
|
Re: Методы оптимизации
Цитата:
Код:
K = K + 1 Цитата:
Цитата:
Код:
If x < 10 Then x = x * 0.5 И насчет знака возведения в степень "^", если известна степень, то лучше заменить на умножение N раз, будет быстрее намного. |
Re: Методы оптимизации
Цитата:
что является самой быстрой операцией за все время существования процесоров Цитата:
Цитата:
и надо писать все в одном сообщении ! |
Re: Методы оптимизации
jimon
Этот топик по Блицу или по ассемблеру а? Может написав на ассемблере такую конструкцию с Not, она будет быстрее выполняться, чем эта же конструкция с Sub, а блиц интерпретирует хз. как. Если неверишь, то проверь практически что будет быстрее работать. |
Re: Методы оптимизации
втом то и дело что блиц конвертит код в asm :)
|
Re: Методы оптимизации
Цитата:
[highlight=blitzbasic] Function PickUnit() Pick=CameraPick(camera,MouseX(),MouseY()) For u.unit = each unit If Pick=u\model SelectUnit(u) Return EndIf Next End Function [/highlight] ;) |
Re: Методы оптимизации
Цитата:
|
Re: Методы оптимизации
А вообще правильнее выход из цикла выполнять так:
[highlight=blitzbasic] Function PickUnit() Pick=CameraPick(camera,MouseX(),MouseY()) For u.unit = each unit If Pick=u\model SelectUnit(u) Exit EndIf Next End Function [/highlight] Return производит выход из функции или подпрограммы, а не из цикла. Выход из цикла выполнятся оператором Exit. |
Re: Методы оптимизации
2 PAX:
А я это писал (насчет Exit). |
Re: Методы оптимизации
Цитата:
|
Re: Методы оптимизации
Спор бессмысленен, есть способ найти элемент без перебора. Я его привел.
|
Часовой пояс GMT +4, время: 20:39. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot