Мало кто об этом знает.

Страницы: 1
RSS
Мало кто об этом знает.
 
Дело бы вечером, делать было нечего.
---------------
Предположим, что у Вас есть большая таблица в терминале QUIK.
------------------------
Например,  у меня получилась такая таблица "orders"  
В ней  227 тысяч строк.
-------------------------
И Вы хотите пробежать по строкам и найти строку с нужными вам параметрами
для этого Вы пишите такой цикл:
-----------------------
Код
local N= getNumberOf("orders");
local j=1;  while N>=j do
   local z=getItem("orders",jz-1)
   jz=jz+1;
   end
для контроля добавим два оператора
первый для замера расхода памяти
и второй для вывода результата в лог файл
получится так
Код
local N= getNumberOf("orders");
local j=1;  while N>=j do
   local mem=math.floor(collectgarbage ("count"))
   local z=getItem("orders",jz-1)
        Log:write(tostring(jz)..","..tostring(mem).."\n");
   jz=jz+1;
   end
А теперь вопрос знатокам, в ответ не подглядывать.
Сколько памяти займет данный цикл пробега по строкам таблицы заявок, в которой 227 строк.
-----------------------------
Уверен, что Вы даже не представляете себе это .
==================
Ответ на поставленный вопрос в лог файле
посмотрели 1-ю строку, заняли память 121 КБ
Код
1,121
посмотрели 100-ю строку, заняли память 654 КБ
Код
100,654
посмотрели  1000-ю строку, заняли память 5395 КБ т е округленно 5 МБ
Код
1000,5395
ну и когда посмотрели  последнюю 227851 строку, заняли память 1205 952 КБ т е округленно 1.2 ГБ
Код
227851,1205952
Вот так Lua в QUIK кушает память.
И  в этом случае мы просто нашли нужную нам заявку в таблице заявок.
-------------------------------------------------------
Угадайте, как с этим бороться?
 
пардон, опечатка
Код
local N= getNumberOf("orders");
local j=1;  while N>=j do
   local mem=math.floor(collectgarbage ("count"))
   local z=getItem("orders",j-1)
        Log:write(tostring(j)..","..tostring(mem).."\n");
   j=j+1;
   end
 
nikolz,Угадайте, как с этим бороться? Хернёй не страдать. Заявки не подавать километровыми пачками и по таблице заявок не бегать.
 
А что если каждые 100 элементов вызывать сборку мусора?
collectgarbage()
 
Цитата
Станислав написал:
А что если каждые 100 элементов вызывать сборку мусора?
   collectgarbage  ()    
это не поможет.
Сборщик убивает лишь то, что не нужно.  Это происходит при выходе из циклов и функций.
--------------------------------
В данном случае работает цикл и все что внутри него не может быть уничтожено так как оно внутри.
что-либо явно уничтожить не получится,
так как в цикле лишь одна переменная,
которой присваивается текущий элемент таблицы архива.
 
SearchItems?
https://forum.quik.ru/messages/forum10/message63139/topic7308/#message63139
 
Цитата
uuh написал:
SearchItems?
https://forum.quik.ru/messages/forum10/message63139/topic7308/#message63139
Верно,
В приведенном примере проблема в реализации функции getItem.
--------------------
Очевидно, чтобы вытащить один элемент таблицы в ней сначала вытаскивается вся таблица до этого элемента, потом выбирается элемент и выдается .
 
Цитата
nikolz написал:
когда посмотрели  последнюю 227851 строку, заняли память 1205 952 КБ т е округленно 1.2 Г
Какая версия QUIK и Lua?
Надо делать так, как надо. А как не надо - делать не надо.
 
QUIK 9.7, 10...
lua 5.3.5
 
Вы утверждаете что чем больше номер в getItem, тем больше памяти он жрёт?
Наверно дело в кол-ве вызовов getItem с разными номерами.
 
nikolz, добрый день.

Проверили скрипт в аналогичных условиях (Рабочее место QUIK 9.7.1, Lua 5.3.5, >300 тыс. заявок в таблице), результат:

Код
303388, 97

Указанное потребление не наблюдали.

Возможно, запущенный Вами скрипт отличается от размещенного в данной теме?
 
Цитата
Anton Belonogov написал:
nikolz, добрый день.

Проверили скрипт в аналогичных условиях (Рабочее место QUIK 9.7.1, Lua 5.3.5, >300 тыс. заявок в таблице), результат:

Код
   303388 ,  97 
  

Указанное потребление не наблюдали.

Возможно, запущенный Вами скрипт отличается от размещенного в данной теме?
Поясните,
Вы использовали таблицу "orders" и создали 300 тысяч заявок, которые отменили или как-то иначе проверяли?
 
Пардон, не увидел, что заявки
---------------
Тогда еще одно условие, проверка размещается в колбеке onParam.
 
повторить эксперимент не могу, так как обещал не нагружать Ваш демо сервер
---------------------
Так как проблему решил, то вопрос не актуальный.
Страницы: 1
Читают тему
Наверх