Lua Performance Loss - Очистить таблицу - PullRequest
0 голосов
/ 28 мая 2018

Небольшая справочная информация: я создаю генератор бесконечного мира с Lua.Когда игрок движется вправо, новые плитки появляются справа, а плитки вне поля зрения (слева) исчезают.Я установил крайние левые плитки на {} или nil (я пробовал оба), чтобы удалить их.Когда игрок продолжает двигаться вправо, происходит значительное снижение производительности.Я могу восстановить производительность, просто установив для всей таблицы карты значение {}

. Обратите внимание на следующее: предположим, что их методы заполнены.Они не важны :

world = {
    tiles = {}
}

-- make world.tiles a 2D array of tiles
function createWorld()
  -- ...
end

-- remove left-most tiles, add right-most tiles
function onMovesRight()
  -- ...
end

-- remove all tiles
function destroyWorld()
  -- ...
end

После выполнения некоторых тестов при значительном снижении производительности я обнаружил следующее при удалении всех плиток:

1. не восстанавливает производительность:

function recover()
  destroyWorld()
  world.tiles = {}
  createWorld()
end

2. Восстанавливает производительность

function recover()
  destroyWorld()
  world = {
      tiles = {}
  }
  createWorld()
end

Почему второй вышеописанный метод восстанавливает производительность моей программы Lua, а не первый?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...