hapr
offline
Опыт:
149Активность: |
Вопросы про опцимизацию кода
При создании кода у меня возникли некоторые вопросы:
Что будет более быстрым решением Код:
2.Если мне нужно использовать, допустим, 10 переменных integer имеет ли смысл заносить их в массив? 3.call IssueTargetOrderById(Paladin, 852092, unit) - функция, которая заставляет паладина использовать благодать на юните. В принципе главным условием является, находиться ли юнит на расстоянии достаточном для действия заклинания, что легко проверяется с помощью IsUnitInRange(Paladin, unit, 750). Но ведь паладин может быть мертв или у его будет недостаточно манны. По этому у меня возник вопрос, что будет мении ресурсоемким проверять эти условия или же просто запускать функцию call IssueTargetOrderById(Paladin, 852092, unit)? Ах да может, кто нибудь знает можно ли в с помощью native функции проверять успело ли перезарядиться способность? 4.В чем отличие constant native от native и различаются ли они по быстродействию? 5.Что луче будет использовать локальные переменные или глобальные для быстродействия если функция запускается например в цикле каждые 2 секунды но больше не в каких других функциях не вызывается то есть можно использовать легко как глобальные так и локальные переменные. 6. Код:
Эта простая функция заставляет при здоровье юнита меньше 100 отправляться на базу. По этой функции у меня возникает несколько вопросов: Есть ли здесь утечки? Если юнит умрет в моей группе "Grp" удалится ли он, потом сам или стоит как в моей функции удалять самому из группы? Какие переменные работают быстрее constant или просто? Стоит ли часто используемые числа в носить в constant для быстродействия как, например в coomon.ai "constant integer HARD = 3"? В моей функции я добавлял юнитов для различия в другую группу будут ли эти две функции работать быстрее чем с группами?: Код:
Отредактировано hapr, 11.01.2008 в 00:40. |
10.01.2008, 01:10 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
1. Первое, имхо. Хотя особой разницы нет.
2. Если они однотипны, и будут использоваться все для какой-то одной цели, то лучше массив. 3. call IssueTargetOrderById(Paladin, 852092, unit) приведёт к тому, что Паладин подбежит к цели сам, если расстояния не хватит. Имхо, проверки тут излишни, только если есть какие-то определённые условия и требования. Нативки для проверки перезорядки нет. 4. Не знаю, может поиск что-н подскажет. 5. Ну, имхо, тут лучше глобалки. Не будет кеша и геморроя с ним. Главное - следить за самим глобалками. 6. Сорри, пока некогда в коде разбираться. Если юнит умирает, он остаётся в группе. 7. Имхо, константы только для удобства в написании кода, если одно и тоже число встечается большое кол-во раз, лучше записать один раз в константу, а во всём коде использовать её. Чтоб если понабодится сменить значение числа, лучше сменить один раз в самой константе, чем искать потом это число по всему коду. 8. Смотря что ты подразумаеваешь под "функции работать быстрее чем с группами". Не понял вопроса. |
10.01.2008, 07:00 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
1) конечно анд, если так как у тебя, т.е. всего один вариант
2) если тебе нужен доступ к переменной по индексу то конечно массив, если нет то никакие массивы ненужны 3) Код:
насколько я помню с случае, если приказ отдан успешно возращается тру 6) вообще можно использовать две глобальные группы, что бы не создавать каждый раз. зы про код вроде так норм, только еще юнита бы обнулить сет а=нул зы с функцией main() поосторожней, в плане того, что она дб одна) |
10.01.2008, 11:09 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
S
offline
Опыт:
43,833Активность: |
Просьба к автору - заноси jass в тег [ code ] (без пробелов)... |
10.01.2008, 11:21 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
jass язык скриптовый там и так все выполняется довольно медленно, так что разница в выполнении двух конструкций может быть в разы меньше чем время выполнения самих конструкций так, что особо этим заморачиватся не надо (если только этот блок не выполняется например 10к раз подряд).
--- 4. Наверняка не знает никто (кроме естественно близзов), но опытным путем было установлено, что константные функции выполняются быстрее. |
10.01.2008, 12:46 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
53,013Активность: |
Цитата:
|
|
10.01.2008, 21:23 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Toadcop, линк дай плиз...
|
10.01.2008, 22:28 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
hapr
offline
Опыт:
149Активность: |
Цитата:
Ответ я понял просто это мне надо для Ai,а ведь во время боя не очень будет кстати если паладин побежит куда-нибудь далеко, поэтому проверка расстояния между им и целью в моем случае и нужна. Как я понимаю SetUnitUserData позволяет у юнита скажем так изменять число, а GetUnitUserData соответственно получает число юнита. Поэтому для различия юнитов можно просто добавлять в группу, а потом проверять находится ли он в этой группе, либо же с помощью SetUnitUserData изменять число, а потом проверять с помощью GetUnitUserData чему оно равно, а вот что быстрее … Цитата:
Не понял ведь разве в моем случае из цикла не происходит выход, когда u == null? а тогда зачем обнулять? А вот в этом случае: Код:
Если эту бесполезную функцию вставить в вечный цикл кода AI(причем AI нечего наделает кроме сбора ресурсов) и воспользоваться способом, предложенным Jon для проверки на утечки в статье Оптимизация - модулем RB, то числа, появляющиеся на экране не изменяются. Эта значит, что не надо обнулять юнита? или я не так понимаю? Цитата:
Имеется в виду 10000? А вызываться эта функция будет в вечном цикле с периодом не более 2 секунды до тех пор покуда не закончится игра. |
|||
11.01.2008, 00:53 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Цитата:
а, да, точно) насчет юзер даты, думаю она как то уместнее... но опять же при некоторых условиях ты можешь все просто сделать массивом т.е. к примеру... ну тут вЖасс наверное нужен, по крайней мере его концепция, смысл в том что есть класс аи, он содержит непосредственно героя, и остальные свойсва, к примеру приказ, абилы, ну я еще не знаю что там... просто циклом проходится по всем аи и т.д. если что неясно спрашуй) |
|
11.01.2008, 14:20 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
53,013Активность: |
Цитата:
ну короче вериш мне насрать =) это ваши проблемы "верить" или нет. как не как PipeDream автор Grimoire. а Вексориан всего лиш препроццесора и то основаном на GoldParser'e (как я понял). да и вообще методы измерения предоставленые в линке на вц3джасс.сом убожественые даже TimeWatch native не юзалась... и то. самый важный аргумент это байткод т.к. он выполняетьса "вирутальной машиной" |
|
12.01.2008, 01:03 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Причем тут код самой функции? Естествено компиляция константной и неконстантой функции в байт код будет одинаковая. В посте на джасскоме, рассматривается вариант, когда адреса вызова функций хранятся в разных таблицах, соотвественно у константных функций таблица меньше и поиск и вызов происходит быстрее. Так что умные слова вроде "байткод" и "виртуальная машина" мне ничего не говрят... Под "выполняются быстрее" я имел ввиду, что вызов константных функций происходит быстрее, а не выполнение самого тела функции, двусмысленно сказал... |
12.01.2008, 11:27 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
53,013Активность: |
exploder я понимаю что ты особено одарёный и про прочтение поста Вексоринафа считаеш что ты понял миро создание. НО КОНСТАНТНЫЕ и НЕ константные функции пременые и т.п. находятьса в одной таблице... =) (тож было проверино) т.е. близзы хотели сделать но не сделали что то подобное.
+ количество переменых или массивов НЕ влияет на их быстродействие. с локальными переменами беда в том что таблиа создаётьса (и разширяетьса) динамически т.е. инциализировать много локалок в бстро вызываемых функция не желательно. и вообще ты пишеш оприраясь на чужие факты... я пишу по тому что я нормально тестировал и не 1 раз... короче не шарю что тебе не нравитьса =) я? ну слава богу =) |
13.01.2008, 00:53 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|