[СТАТЬЯ] Уменьшение лагов в карте
|
|
Ty3uK | Дата: Воскресенье, 26 Февраля 2012, 14:24:27 | Сообщение # 51 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ну, ты в тестах приводишь результаты неуничтоженной пустой группы. Вот и сказал. А уничтожение группы уничтожает только ту, которой ты дал значение "выбрать всех юнитов...", но локалка осталась внутри, и она утекла. Я когда код пишу, офк же удаляю группы, а как иначе но я ж руками пикаю, а не через бж
|
|
|
|
lawson | Дата: Воскресенье, 26 Февраля 2012, 14:39:42 | Сообщение # 52 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ну и что тут!? Функция которая создает локально и возвращает форс - утечки нет, только нужно обнулять локальный форс в функции GetForce() так как ты возвращаешь лишь значение переменной f, а не саму переменную. И кто так будет делать или это для теста? Таймер вообще можно создавать уже в функции через CreateTimer(), т к он бесконечный, да и конечный таймер также только дестроить его после истечения.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 26 Февраля 2012, 14:45:09 |
|
|
|
Ty3uK | Дата: Воскресенье, 26 Февраля 2012, 14:47:19 | Сообщение # 53 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Лавс, если ты сначала обнулишь переменную, а потом вернешь значение, то ты вернешь 0, а если сначала вернешь, а потом захочешь обнулить, то обнуления не будет, ибо return провоцирует выход из функции
|
|
|
|
lawson | Дата: Воскресенье, 26 Февраля 2012, 14:53:40 | Сообщение # 54 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ty3uK, Ойойойой что-то не подумал, сори. Ну тогда останется утечка, да? - Ведь значение у переменной f так и останеться.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Воскресенье, 26 Февраля 2012, 14:57:39 | Сообщение # 55 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Да, но дело не в значении. Сам же знаешь- переменной выделяется память. Вот она и не освобождается, потому как обнуления нет. Есть несколько способов- писать в структуру, глобалку или хэш, обнулять переменную и возвращать значение через сохраненное значение(например, return LoadForceHandle() )
Сообщение отредактировал Ty3uK - Воскресенье, 26 Февраля 2012, 15:00:09 |
|
|
|
lawson | Дата: Воскресенье, 26 Февраля 2012, 15:10:39 | Сообщение # 56 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) Есть несколько способов- писать в структуру, глобалку или хэш, обнулять переменную и возвращать значение через сохраненное значение(например, return LoadForceHandle() ) Quote (lawson) И кто так будет делать А цель данного теста? Где-то это применить?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Воскресенье, 26 Февраля 2012, 15:15:16 | Сообщение # 57 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Цель теста видимо доказать нам, что бж, которые возвращают локальные переменные, не утечны
|
|
|
|
SirNikolas | Дата: Воскресенье, 26 Февраля 2012, 15:19:04 | Сообщение # 58 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code function GetForce takes nothing returns force set udg_F = CreateForce() return udg_F endfunction
function Trig_test_Actions takes nothing returns nothing local force f = GetForce() //set udg_F = null call DestroyForce(f) set f = null endfunction
function InitTrig_test takes nothing returns nothing call TimerStart(CreateTimer(), .01, true, function Trig_test_Actions) endfunction Не могу надивиться. При исполнении этого кода процесс медленно толстеет со скоростью 400 Кб/мин. А если снять комментарий, вес процесса остается постоянным. Пробовал даже вот так:Code function GetForce takes nothing returns nothing set udg_F = null set udg_F = CreateForce() return udg_F endfunction Не помогает. Все равно процесс увеличивается в размерах.
Скажи, разве это не криворукость?
|
|
|
|
BublGum | Дата: Воскресенье, 26 Февраля 2012, 15:33:18 | Сообщение # 59 |
5 уровень
Группа: Проверенные
Сообщений: 121
Награды: 0
Репутация: 25
Блокировки:
| блин как же здесь все сложно в этом jass я думал что он легче php а на самом деле нет!
|
|
|
|
lawson | Дата: Воскресенье, 26 Февраля 2012, 15:35:42 | Сообщение # 60 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (BublGum) как же здесь все сложно в этом jass Quote (BublGum) я думал что он легче php Сразу мысль в голове что ты не знаешь ни пхп ни жасс.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 26 Февраля 2012, 15:36:02 |
|
|
|
BublGum | Дата: Воскресенье, 26 Февраля 2012, 15:45:50 | Сообщение # 61 |
5 уровень
Группа: Проверенные
Сообщений: 121
Награды: 0
Репутация: 25
Блокировки:
| Quote (lawson) Сразу мысль в голове что ты не знаешь ни пхп ни жасс. так и есть! ну синтаксис пхп я знаю
|
|
|
|
Impregnable | Дата: Воскресенье, 26 Февраля 2012, 16:49:35 | Сообщение # 62 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| SirNikolas ну вот видишь, сам понял, почему во всех BJ не обнуляются локалки. А вот что касается криворукости объясню(и закончить наконец этот спор): Редактор был создан в первую очередь для самих Близов, и делать из jass'а полноценную среду программирования просто ни к чему. Теперь на счет всех утечек и прочей ерунды. War ведь стратегия и значит карты рассчитаны только на Развитие(где используются только функции сражения) и Кампании(чтобы там возникли лаги, наверное надо оставить включенным компьютер на 3-5 месяцев). А и при запуске редактора можно увидеть "Blizzard Entertainment НЕ осуществляет поддержку Редактора..."
Вывод: Радуйтесь, что вам вообще дали возможность создавать свои карты.
|
|
|
|
lawson | Дата: Воскресенье, 26 Февраля 2012, 17:23:18 | Сообщение # 63 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Impregnable) Радуйтесь, что вам вообще дали возможность создавать свои карты. Если бы Близы не совали редактор к каждому вару, то о нем бы забыли где-то через год - полтора. Редактор очень сильный стимулятор, способный долго продлевать жизнь игре, это один из ходов близзов по распостронению вара, ведь с помощью редактора можно и редактировать и создавать новые карты, такие как дота, которая спровоцировала создание из как ЛоЛ и ХоН. И вот почему теперь Близзы к редактору второго старкрафта, в мануэле приписали: что каждая карта созданная с помощью ихнего редактора является собственностью Близзов. Вот так, как выгодно пропихивать редакторы, а не то что ты сказал выще.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Impregnable | Дата: Воскресенье, 26 Февраля 2012, 17:46:08 | Сообщение # 64 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Несомненно редактор продлевает жизнь игре, но не надо сравнивать разные игры, тем более выпущенные с разницой более пяти лет.
|
|
|
|
SirNikolas | Дата: Понедельник, 27 Февраля 2012, 09:39:05 | Сообщение # 65 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Решение проблемы со всеми этими группами и кланами найдено.Code function GetForceOfPlayer2 takes force f, player p returns force call ForceAddPlayer(f, p) return f ednfunction
function GetForceOfPlayer1 takes player p returns force return GetForceOfPlayer2(CreateForce(), p) endfunction
function Trig_test_Actions takes nothing returns nothing local force f = GetForceOfPlayer1(Player(0)) call DestroyForce(f) set f = null endfunction
function InitTrig_test takes nothing returns nothing call TimerStart(CreateTimer(), .01, true, function Trig_test_Actions) endfunction
|
|
|
|
Impregnable | Дата: Понедельник, 27 Февраля 2012, 14:39:54 | Сообщение # 66 |
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
| Фуф нашел в чем проблема. Оказывается, когда удаляется игровой объект, то в текущем потоке необходимо удалить все ссылки на него.
Кстати SirNikolas твой код нерабочий и его можно немного улучшить. Code define <GetForceOfPlayer>(pl) = {GetForceOfPlayer1(pl); set loc_force = null} enddefine
globals force loc_force endglobals
function GetForceOfPlayer1 takes player p returns force set loc_force = CreateForce() call ForceAddPlayer(loc_force, p) return loc_force endfunction
function Trig_test_Actions takes nothing returns nothing local force f = GetForceOfPlayer(Player(0)) call DestroyForce(f) set f = null endfunction
function InitTrig_test2 takes nothing returns nothing call TimerStart(CreateTimer(), .01, true, function Trig_test_Actions) endfunction Quote (SirNikolas) Скажи, разве это не криворукость? Да, наверное, но только на половину.
|
|
|
|
SirNikolas | Дата: Понедельник, 27 Февраля 2012, 15:22:04 | Сообщение # 67 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Impregnable) Code define <GetForceOfPlayer>(pl) = {GetForceOfPlayer1(pl); set loc_force = null} enddefine Code call DisplayTextToForce(GetForceOfPlayer(Player(0)), "define'ы не будут работать, когда результат функции является аргументом")
|
|
|
|