<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CE Lua чистка памяти от утечек]]></title><description><![CDATA[<p dir="auto">Хотя в последних версиях CE включили чистку памяти (надеюсь, что эта функция была и есть). Но может пригодится очистка памяти. Вдруг?</p>
<p dir="auto">ИМХО отказываться от CE Lua скриптов из-за утечек памяти не стоит, если такая происходит. Т.е. оперативная память забивается каким-то мусором. Это бывает редко, когда пилишь плагины.</p>
<p dir="auto">Можно чистить память следующим образом</p>
<pre><code>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)
</code></pre>
]]></description><link>https://celua.ru/topic/54/ce-lua-чистка-памяти-от-утечек</link><generator>RSS for Node</generator><lastBuildDate>Wed, 17 Jun 2026 13:31:54 GMT</lastBuildDate><atom:link href="https://celua.ru/topic/54.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Apr 2023 21:15:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CE Lua чистка памяти от утечек on Fri, 07 Apr 2023 22:26:33 GMT]]></title><description><![CDATA[<h2>Оптимизация CE Lua кода по сборке мусора</h2>
<p dir="auto">Есть инструкции, которые добавляют мусора больше чем другие.<br />
Показываем объем памяти мусора</p>
<pre><code>print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
</code></pre>
<p dir="auto">Ниже код того как попробовать узнать сколько мусора добавил код при парсинге ассемблерной строки двумя способами</p>
<pre><code>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)) )
</code></pre>
<p dir="auto">Пример результатов могут отличаться. Фиг его знает почему. Возможно работает сборщик мусора в разные моменты времени</p>
<blockquote>
<p dir="auto">Lua memory usage 1.8 MiB<br />
Lua memory usage 1.8 MiB<br />
Lua memory usage 1.8 MiB<br />
1.49</p>
<p dir="auto">Lua memory usage 1.8 MiB<br />
Lua memory usage 2.3 MiB<br />
Lua memory usage 2.3 MiB<br />
1.47</p>
<p dir="auto">Lua memory usage 2.3 MiB<br />
Lua memory usage 2.8 MiB<br />
Lua memory usage 2.8 MiB<br />
1.49</p>
</blockquote>
]]></description><link>https://celua.ru/post/179</link><guid isPermaLink="true">https://celua.ru/post/179</guid><dc:creator><![CDATA[MasterGH]]></dc:creator><pubDate>Fri, 07 Apr 2023 22:26:33 GMT</pubDate></item></channel></rss>