Очищение памяти

Страницы: 1
RSS
Очищение памяти
 
Господа, прошу подсказать.
Мои скрипты работают на луа. Я объединяю данные в огромную таблицу.
Вот образец данных:

Таких файлов десятки.
Я их склеиваю в одну большую таблицу с помощью функции:
Код
function tableMerge(table1, table2)
    for k,v in pairs(table2) do
   --deceleration()
      table.insert(table1,v)
      --проверим качество данных в таблице. Нет ли разрывов в записях.
   
      -- if v.stime-(remember_prev_time or v.stime)>100 then
         -- mm("в таблице дырка "..v.stime.." "..v.bid)
      -- end
      remember_prev_time=v.stime
    end
   remember_prev_time=nil
    return table1
end 
В итоге получается огромная таблица, которая сильно забивает память.
---
Вот как это выглядит на виртуалке.

А теперь мой вопрос.
в конце работы скрипта я УБИВАЮ эту гигантскую таблицу с помощью строчки
t_big=nil
Надеюсь, что при этом будет освобождена память.
Но этого не происходит.
Более того. Остановка скрипта не освобождает память.
Она освобождается только с выключением КВИКа
подскажите как освобождать память силами самого скрипта.
Спасибо.
---
П.С. Я знаю, что мой подход сам по себе не совершенен. Иду по пути переноса громоздких функций в dll. Но в силу слабеньких мозгов мне ещё далеко до этого. Так что пока работаю в рамках Луа.
 
Уточнение.
Выключение скрипта с помощью кнопки Остановить освобождает память.
Но если он останавливается по причине выполнения всех задач (нет вечного цикла while is run do и при этом закончилась функция main), то память не освобождается.
 
collectgarbage()  решило проблему
теперь память очищается
 
Почитайте на досуге про сборку мусора (garbage collection). В Lua этот механизм используется, как Вы уже смогли заметить.
 
Если в таблице относительно немного колонок, но много строк, то есть способ сильно сэкономить, если хранить таблицу в виде набора колонок. В Вашем примере будет 6 колонок, которые можно реализовать через массив чисел с индексацией с 1. Конечно, надо беспокоиться о том, чтобы в колонках было одинаковое количество элементов. В результате экономия будет существенной, т.к. не будет создаваться хэш-таблица на каждую строку.
 
Цитата
_sk_ написал:
Если в таблице относительно немного колонок, но много строк, то есть способ сильно сэкономить, если хранить таблицу в виде набора колонок. В Вашем примере будет 6 колонок, которые можно реализовать через массив чисел с индексацией с 1. Конечно, надо беспокоиться о том, чтобы в колонках было одинаковое количество элементов. В результате экономия будет существенной, т.к. не будет создаваться хэш-таблица на каждую строку.
А вот это интересный приём... есть оценки сравнения по расходу памяти на таблицу чисел 10x1'000'000 в обоих форматах?... даже вот любопытно стало, будет время, запилю тестик....
Страницы: 1
Читают тему
Наверх