TiM
Старичок
offline
Опыт:
8,594Активность: |
Полезные команды.
Решил доделать карту и вот думаю начать с её оптимизации и уничтожению утечек.
В карте используется достаточно много функций "Pick every units", так вот, что и где нужно писать, чтобы при этом не происходило утечек. И еще-я был бы рад, если бы мне(авось и не только мне) здесь написали несколько полезных моментов в оптимизации. Например-что каждый спецэффект так или иначе нужно уничтожать и любым локальным переменным в конце функции присваивать значение 0. TiM добавил: Пожалуйста ответьте. |
17.03.2006, 23:26 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Медведь
ФффыррфррфффФФфф!
offline
Опыт:
21,702Активность: |
Насчёт групп - в инициализации карты пропиши set bj_wantDestroyGroup = true Дальше, обязательно ремувь точки (locations) |
18.03.2006, 07:26 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
TiM
Старичок
offline
Опыт:
8,594Активность: |
как эти точки называются? И когда они создаются? |
19.03.2006, 01:30 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Медведь
ФффыррфррфффФФфф!
offline
Опыт:
21,702Активность: |
При триггерных действиях типа:
Создать юнита там-то Передвинуть то-то туда-то Polar Projection Point with offset Center of Region и тому подобное автоматически создаются точки. Поскольку у них хэндл-тип, они тормозят игру. Их надо сначала загонять в переменные, а после использования ремувить и обнулять. Пример: Код:
|
19.03.2006, 02:28 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
TiM
Старичок
offline
Опыт:
8,594Активность: |
Thanks. |
19.03.2006, 04:38 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
KyLARaN
offline
Опыт:
1,082Активность: |
А что будет если не обнулять эту локацию??? |
18.05.2006, 19:54 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Celebrate
offline
Опыт:
849Активность: |
Цитата:
НЕ ТАК!!! Custom Script: set bj_wantDestroyGroup = true надо ставить перед КАЖДЫМ пиком. Смотрим blizzard.j: Код:
KyLARaN будет утечка. Вар будет "думать", что по адрессу этой переменной что-то хранится, и не будет туда ничего писать. Я проверял по РБ ссылкам. |
|
18.05.2006, 21:20 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
KyLARaN
offline
Опыт:
1,082Активность: |
А такая ошмбка может вызвать сервер сплит, когда много таких переменных не обнуляется??? |
19.05.2006, 08:40 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
felix_ff
offline
Опыт:
757Активность: |
По идеи много накопившихся не обнуленных/уничтоженный объектов приведут к сильному торможению игры. насчет вылета я не уверен но это легко проверить попробуй в переодическом тригере циклом от 1 до 10 пикать какие либо группы юнитов и напрявлять в разные регионы... через несколько секунд игра привратицца в ацтой. :) |
19.05.2006, 11:23 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Celebrate
offline
Опыт:
849Активность: |
KyLARaN по-идеи такая же утечка, как и другие.
Если юзаешь кеш (SCV), то память будет бешено засоряться стрингами. |
19.05.2006, 20:23 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Dead Jay
Братег Дракончег
offline
Опыт:
8,425Активность: |
А вот у меня возник вопрос:
Такой триггер будет удалять юнитов? A unit умирает Wait 40.00 sec Remove (DyingUnit) Dead Jay добавил: А Order игру засоряет? Dead Jay добавил: А Create отрядами? |
20.05.2006, 01:21 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Цитата:
Ничего подобного, 99% джаза построена на РБ и засорения не происходит. Кривые руки засоряют память и потеря ссылок на переменные, когда ретурн нулл удалить точку уже не получится. |
|
20.05.2006, 05:54 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Celebrate
offline
Опыт:
849Активность: |
DioD ты не понял.
Я имел ввиду, что если необнулять переменные и юзать кеш одновременно - т.е. тогда будут создаваться много новых строк. |
20.05.2006, 10:07 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Вот ты мне объясни, юнит х строка y значение z откуда тут будут новые строки, или каждый раз писать новую строку? |
20.05.2006, 13:40 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
felix_ff
offline
Опыт:
757Активность: |
Цитата:
он будет удалять только последнего умершего юнита... для такого случая необходимо юзать локальные пеерменные типа local unit u = GetDyingUnit() Wait(40.00) call RemoveUnit(u) set u = null ордер стринги это константные значения... имхо не могут. CreateUnit ? или что? не совсем понял вопроса. |
|
20.05.2006, 14:33 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Celebrate
offline
Опыт:
849Активность: |
DioD простой пример:
Код:
Если мы будем записывать в этой функции таймер в кеш, то мы каждый раз будем писать новую строку. А эта новая строка из памяти уже никуда не денется. Код:
Если бы мы обнуляли t (как в этой функции, так и в той, которая уничтожит таймер), то строка была бы одна и таже! (естественно, не при перезапуске функции, а уже после того как таймер будет уничтожен - другой функцией) Тоесть засорение стрингами было бы совсем незначительным. |
20.05.2006, 16:20 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Код:
|
21.05.2006, 00:34 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
felix_ff
offline
Опыт:
757Активность: |
NETRAT я хотел сначала написать для ГУИ... но потом решил на джассе и уж просто не усмотрел про вейт... :)
ну а про код... там например перед воскрешением можно сделать проверку : если юнит u мертв то ремувить .. иначе ничего не делать :p |
21.05.2006, 01:20 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,712Активность: |
Ага, а если он в труповозке? =0 не так все просто |
21.05.2006, 01:49 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Делать проверку перед воскрешением и если юнит попадает в транспорт. |
21.05.2006, 10:20 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|