<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Отключать сборщик мусора при работе с колбеками. Вы прикалываетесь?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Отключать сборщик мусора при работе с колбеками. Вы прикалываетесь? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Fri, 17 Apr 2026 04:18:05 +0300</pubDate>
		<item>
			<title>Отключать сборщик мусора при работе с колбеками. Вы прикалываетесь?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81140/topic9451/">Отключать сборщик мусора при работе с колбеками. Вы прикалываетесь?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Тема для начинающих писателей роботов.<br />--------------------------<br />Рано и поздно у Вас возникнет желание, либо необходимость, ускорить работу вашего робота. <br />Да, это скорее всего, реально <br />Но существует много ненужных телодвижений там, где что-либо делать не имеет смысла.<br />-----------------------<br />Например, отключать сборщик мусора в колбеках , а потом его включать. <br />-------------------------<br />Поясняю, почему в этом нет смысла.<br />======================<br />Для этого напишем следующий тест:<br />
====code====
<pre>local t1=nkQt.count(); local x1=collectgarbage("count");
 print("занято память КБ= "..x1//1)
local e={}; for j=1,100000 do e&#91;j&#93;=j end --создаем таблицу
local t1=nkQt.count(); local x=collectgarbage("count")-x1;
e=nil; --удаляем таблицу в мусор
print("объем мусора КБ="..x//1)
local t1=nkQt.count(); local x=collectgarbage("collect")
 print("сборка мусора(ms)="..(0.1*(nkQt.count()-t1))/1000)
local x=collectgarbage("count")&nbsp;&nbsp;print("занято память КБ= "..x//1)</pre>
=============
а это результат его исполнения:
====code====
<pre>&#62;D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "QUIKman.lua" 
занято память КБ= 220.0
объем мусора КБ=2048.0
сборка мусора(ms)=0.0379
занято память КБ= 156.0
&#62;Exit code: 0</pre>
=============
В тесте создаем таблицу и заполняем ее. <br />Потом удаляем таблицу. <br />В результате у нас создается объем мусора в 2 Мбайта.<br />Сборщик мусора собирает его за <B>0.038</B><B> ms(0.000038 &nbsp;сек).<br /></B>---------------------------<br /><B>Как уже писал на форуме,</B><br />Скрипт на луа &nbsp;из-за Sleep(1) в Main имеет задержу исполнения не менее <B>16 ms</B>, равную кванту времени Windows. <br />--------------------------------------<br />Многие, по рекомендации разработчиков QUIK, ставят Sleep(1000) &nbsp;т.е. задержку в <B>1000 ms</B><br />----------------------------------------<br />Таким образом, если до очередного срабатывания колбека включится сборщик, то он задержит колбек на 0.04 ms.<br />и сборщик мусора создаст дополнительную задержку не более, чем &nbsp;в 0.25% от задержки от Sleep(1)<br />------------------------<br />Можно перепрограммировать системный таймер и получить задержку не менее 1 ms. &nbsp;<br />------------------------------<br />Тогда задержка от сборщика составит не более 4% от задержки Sleep(1), но это всего 0.00004 секунды.<br />--------------------------------------------------<br />Полагаете, что с этим надо бороться. Вы серьезно?<br />========================================================<br />Для справки:<br />------------------<br />За &nbsp;квант времени в 1-2 мс поток получает возможность выполнить многие миллионы инструкций процессора.<br />------------------<br />Не забывайте и тот факт, что информация с биржи, поступающая к Вам через интернет, приходит с задержкой десять и более ms. <br />
			<i>04.02.2026 07:26:30, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81140/topic9451/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81140/topic9451/</guid>
			<pubDate>Wed, 04 Feb 2026 07:26:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
