SearchItems: утечки памяти

Страницы: 1
RSS
SearchItems: утечки памяти
 
Многократные вызовы SearchItems для поиска нужного инструмента в таблице лимитов по бумагам приводят к утечкам памяти, которые не может устранить сборщик мусора Lua.

Следующий метод возвращает баланс по заданному инструменту и коду клиента:
Код
function TradeItem:get_balance()
   local res = 0
   if self.bal_func == nil then
      self.bal_func = function(t) return t.limit_kind == 2 and t.client_code == self.clientcode and t.sec_code == self.seccode end
   end
   local sec_table = SearchItems("depo_limits", 0, getNumberOf("depo_limits") - 1, self.bal_func)
   if sec_table and #sec_table > 0 then 
      local table_item = getItem("depo_limits", sec_table[1])
      if table_item then
         res = table_item.currentbal
      end
   end
   return res
end
Вызывается этот метод часто (несколько раз в секунду) и приводит к серьезным утечкам памяти (объем используемой памяти проверяю через функцию collectgarbage("count")). За день работы набирается больше 2 Гб.

Если я буду искать нужный инструмент просто прямым перебором всех строк в таблице, то все нормально.

Могут ли разработчики взглянуть на данную проблему? Версия QUIK 7.5.0.72, Lua версии 5.1.
 
У меня очень похожая история
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Сергей,

одна из возможных причин - в создании функции-реферрала внутри другой функции. Не исключено, что в той реализации, которую вы указали, особенности Lua в механизме создания функций и их вызовов приводят к удержанию в памяти огромного количества экземпляров тела функции. Попробуйте вынести функцию-реферрал, которую вы указываете в качестве параметра для SearchItems(), за пределы какой-либо текущей функции или метода (:). Попробуйте оперировать ссылкой на отдельно  стоящую функцию.
 
Здравствуйте!
Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Добрый день,

Ошибка будет исправлена в одной из следующих версий программы
 
Сергей, Добрый день,
     
      Описанная в данном инциденте ошибка была исправлена в версии       7.16.1 терминала QUIK.
      Рекомендуем вам обновить версию программы.
     
      Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх