Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Программирование
  3. Плагин-строй
  4. CE Lua чистка памяти от утечек

CE Lua чистка памяти от утечек

Запланировано Прикреплена Закрыта Перенесена Плагин-строй
ce luace pluginmemory leak
2 Сообщения 1 Posters 51 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • M Не в сети
    M Не в сети
    УченикMasterGH Администраторы
    написал в 7 апр. 2023 г., 21:15 отредактировано
    #1

    Хотя в последних версиях CE включили чистку памяти (надеюсь, что эта функция была и есть). Но может пригодится очистка памяти. Вдруг?

    ИМХО отказываться от CE Lua скриптов из-за утечек памяти не стоит, если такая происходит. Т.е. оперативная память забивается каким-то мусором. Это бывает редко, когда пилишь плагины.

    Можно чистить память следующим образом

    function startCollectgarbageProcess(interval, showStatus)
    local timer1 = createTimer(true)
    timer1.Interval = interval
    timer1.onTimer = function ()
    if (showStatus) then
    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    end
    collectgarbage("restart")
    collectgarbage("collect")
    if (showStatus) then
    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    end
    end
    end
    \-- Собирать каждую 1 минуту и показать результат
    startCollectgarbageProcess(60000, true)
    1 ответ Последний ответ
    0
  • M Не в сети
    M Не в сети
    УченикMasterGH Администраторы
    написал в 7 апр. 2023 г., 22:26 отредактировано
    #2

    Оптимизация CE Lua кода по сборке мусора

    Есть инструкции, которые добавляют мусора больше чем другие.
    Показываем объем памяти мусора

    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    

    Ниже код того как попробовать узнать сколько мусора добавил код при парсинге ассемблерной строки двумя способами

    local s = " 0045464A - FF 05 A4B54500 - inc [0045B5A4] { [000003EA] }"
    function GetDebugString(address)
    return splitDisassembledString(s)
    end
    \-- address, bytes, opcode
    function GetDebugString2(address)
    local clearString = string.gsub(s, '%s','')
    return string.match(clearString, '^(.-)%-(.-)%-(.-)$')
    end
    function NoOptimizeCode()
    GetDebugString2()
    end
    function OptimizeCode()
    GetDebugString()
    end
    local countRepeat = 500000 -- add more cycle
    local x1 = 0
    local x2 = 0
    x1 = getTickCount()
    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    for i = 1, countRepeat do NoOptimizeCode() end
    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    x2 = getTickCount()
    for i = 1, countRepeat do OptimizeCode() end
    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    print(string.format("%.2f", (x2 - x1)/(getTickCount() - x2)) )

    Пример результатов могут отличаться. Фиг его знает почему. Возможно работает сборщик мусора в разные моменты времени

    Lua memory usage 1.8 MiB
    Lua memory usage 1.8 MiB
    Lua memory usage 1.8 MiB
    1.49

    Lua memory usage 1.8 MiB
    Lua memory usage 2.3 MiB
    Lua memory usage 2.3 MiB
    1.47

    Lua memory usage 2.3 MiB
    Lua memory usage 2.8 MiB
    Lua memory usage 2.8 MiB
    1.49

    1 ответ Последний ответ
    0

2/2

7 апр. 2023 г., 22:26

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
1 / 1
  • Первое сообщение
    2/2
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы