CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

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

    Запланировано Прикреплена Закрыта Перенесена Плагин-строй
    ce luace pluginmemory leak
    2 Сообщения 1 Posters 61 Просмотры 1 Watching
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • MasterGHM Не в сети
      MasterGH Администраторы
      отредактировано

      Хотя в последних версиях 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
      • MasterGHM Не в сети
        MasterGH Администраторы
        отредактировано

        Оптимизация 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

        • 1 / 1
        • Первое сообщение
          Последнее сообщение
        Powered by NodeBB | Contributors
        СeLua[RU] 2025©