Подписка на стакан OnQuote в quik 9.7.1

Страницы: 1
RSS
Подписка на стакан OnQuote в quik 9.7.1
 
quik 9.7.1
простой код, за несколько минут занимаемая память разбухает до более 10 Мб, запускается в lua 5.4.1
Код
function main()
   while true do
      sleep(1000)
   end
end

function OnQuote(class, sec)   
   if ((class == "SPBFUT") and (sec == "SiU2")) then
      local ql2 = getQuoteLevel2(class, sec)
      -- что-то делаем
   end
end

 
Цитата
Дмитрий написал:
quik 9.7.1
простой код, за несколько минут занимаемая память разбухает до более 10 Мб, запускается в lua 5.4.1
Код
   function   main ()
    while   true   do 
       sleep ( 1000 )
    end 
 end 

 function   OnQuote (class, sec)   
    if  ((class  =  =   "SPBFUT" )  and  (sec  =  =   "SiU2" ))  then 
       local  ql2  =   getQuoteLevel2 (class, sec)
       -- что-то делаем 
    end 
 end 

  
попробуйте тоже на другой версии. возможно так задумано уже давно?
 
Чисто из любопытства: функция забивает память без вызова только своим присутствием в коде?
Или в этой версии она стала функцией обратного вызова?
 
Цитата
Kolossi написал:
getQuoteLevel2
Не понятно, что значит забивает присутствием.
Поставьте вывод занятой памяти перед ней и после нее.
-------------------------
что колбек , что не колбек - на память не влияет.  
 
OnQuote - это и есть доступный колбек. Объявленная глобально такая функция будет вызываться на каждый чих в стакане.
Т.к. таких изменение очень, очень много, и на каждое изменение вызывается getQuoteLevel2, то память и забивается, т.к.
getQuoteLevel2 возвращает две таблицы, две строки. А это не так и мало. И делается это так часто, что сборщик мусора просто не успевает.

Если Вам не нужны данные стакана в каждом срезе без пропусков, то в колбеке надо просто установить флаг, что есть новый стакан по инструменту, а в потоке main его прочитать.
 
Цитата
Nikolay написал:
OnQuote - это и есть доступный колбек. Объявленная глобально такая функция будет вызываться на каждый чих в стакане.
Т.к. таких изменение очень, очень много, и на каждое изменение вызывается с, то память и забивается, т.к.
getQuoteLevel2 возвращает две таблицы, две строки. А это не так и мало. И делается это так часто, что сборщик мусора просто не успевает.

Если Вам не нужны данные стакана в каждом срезе без пропусков, то в колбеке надо просто установить флаг, что есть новый стакан по инструменту, а в потоке main его прочитать.
Пардон, невнятно выразился. Полагаю что проблема не в OnQuote, в этом легко убедится убрав из функции getQuoteLevel2.
 
Проблема в совокупности OnQuote и getQuoteLevel2
Если сделать так, то занимаемая память варьируется в р-не 50-100 кб

Код
function main()
   while true do
      sleep(10)
      gQL()
   end
end

function gQL()
   local ql2 = getQuoteLevel2("SPBFUT", "SiU2")
end

В OnQuote в скрипте была запись в глобальные переменные лучших bid и offer из стакана, потом в main эти значения учитывались. На версиях 9.5, 9.4 потребляемая помять колебалась в р-не 200-300 кб.
Страницы: 1
Читают тему
Наверх