Медленный getItem для таблицы depo_limits

Страницы: 1
RSS
Медленный getItem для таблицы depo_limits, Работает медленно на последних версиях
 
Скрипт на Lua,
Обычный обход item'ов таблицы "depo_limits".

Код
local items_num = getNumberOf("depo_limits")
for i = 0, items_num - 1 do
  local table_item = getItem("depo_limits", i)
  --дальнейшие действия с table_item
end 
Цикл работает чрезвычайно медленно, что приводит к тормозам моего скрипта. Всего кол-во строк в таблице (items_num) чуть более ста.
Трассировка говорит, что вызов getItem занимает 0,015 с. Можно посчитать, что каждый такой цикл занимает 1,5с.


Проявляется на новых версиях QUIK'а. Последняя версия QUIK где работает нормально - 7.19.3.1.

В связи с этим больше не обновляю QUIK.


Данный код просто лишь загружает в мою таблицу баланс по инструменту. Кол-во отслеживаемых инструментов более сотни, можете посчитать, сколько у меня занимает инциализация таблицы (1,5с x 100 = 150сек это в лучшем случае).

SearchItems работает аналогично для этой таблицы. Остальные таблицы кажется отрабатывают корректно, но проверял не все.

 
Здравствуйте,
А если вообще убрать getItem из цикла?
Больше похоже на таймер Windows нем на проблему с QUIK
Про таймер рассказано например тут
https://habr.com/ru/company/intel/blog/186998/

и как можете заметить он тоже приблизительно равен 15 мс
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
А если вообще убрать getItem из цикла?
Больше похоже на таймер Windows нем на проблему с QUIK
Про таймер рассказано например тут
https://habr.com/ru/company/intel/blog/186998/

и как можете заметить он тоже приблизительно равен 15 мс
Как я вынесу getItem из цикла? Мне нужно найти нужный инструмент из таблицы. Для этого нужно перебирать каждый элемент. Если это не QUIK, почему тогда на 19 версии все работает?
 
Цитата
Сергей написал:
Цитата
Sergey Gorokhov написал:
Здравствуйте,
А если вообще убрать getItem из цикла?
Больше похоже на таймер Windows нем на проблему с QUIK
Про таймер рассказано например тут
 https://habr.com/ru/company/intel/blog/186998/  

и как можете заметить он тоже приблизительно равен 15 мс
Как я вынесу getItem из цикла? Мне нужно найти нужный инструмент из таблицы. Для этого нужно перебирать каждый элемент. Если это не QUIK, почему тогда на 19 версии все работает?
Кроме того, я никаких таймеров не взводил. Если это QUIK выполняет данный цикл через таймеры, то это значит что он неправильно работает.
 
Цитата
Сергей написал:
Как я вынесу getItem из цикла? Мне нужно найти нужный инструмент из таблицы. Для этого нужно перебирать каждый элемент.
Просто чтобы Вы убедились что getItem не виноват. Ничего не мешает потом вернуть его обратно.

Цитата
Сергей написал:
Если это не QUIK, почему тогда на 19 версии все работает?
Вы проверяли или это домыслы?
Ниже простая проверка которая показывает что всё одинаково что на 7.19 что на 7.27, ровно как и должно быть.

Цитата
Сергей написал:
Кроме того, я никаких таймеров не взводил. Если это QUIK выполняет данный цикл через таймеры, то это значит что он неправильно работает.
Вы явно не читали ссылку, рекомендуем прочитать. И заметьте, там про QUIK вообще ничего не сказано.
Как уже говорилось выше и еще раз повторим, что речь про таймер операционной системы который установлен компанией Microsoft, а не QUIK.
И там же по ссылке говорится что некоторые программы умеют менять значение таймера.
Еще раз рекомендуем прочитать то что написано в статье. Все вопросы сразу же отпадут.

Если к нам нет доверия, Вы можете проверить данные самостоятельно:
Код:
Код
function main()
   local items_num = getNumberOf("depo_limits")
   local T1 = os.sysdate()
   for i = 0, items_num - 1 do
      local table_item = getItem("depo_limits", i)
   end 
   local T2 = os.sysdate()
   local total= (T2.hour-T1.hour)*60*60*1000+(T2.min - T1.min)*60*1000+(T2.sec - T1.sec)*1000+(T2.ms - T1.ms)
   message("total_limits="..tostring(items_num).." total_time_ms="..tostring(total).." avg_ms="..(string.format("%f",(total)/items_num)))
end


Результаты:

 
Цитата
Sergey Gorokhov написал:

Если к нам нет доверия, Вы можете проверить данные самостоятельно:
Если ко мне нет доверия, вот мои скрины и код.








 
Сергей,
Повторите то же самое при отключенном терминале.
И не надо менять код тестового скрипт, это совершенно лишнее.
 
Цитата
Sergey Gorokhov написал:
Сергей,
Повторите то же самое при отключенном терминале.
И не надо менять код тестового скрипт, это совершенно лишнее.
Что значит отключенном, какая разница отключен или нет? Я думаю это совершенно не зависит от того, подключен ли сервер или нет.

Разве вы не видите, сколько у меня времени занимает getItem и не видите, сколько у меня строк в таблице и у вас? Как я не могу менять код. Это совершенно необходимо чуть поменять код, чтобы было значимое количество итераций и у меня чтобы не занимала час работа скрипта. Я думаю вы в состоянии понять смысл моих минимальных правок в тестовом скрипте.

Я думаю из моих скринов совершенно все ясно, что апгрейд QUIK'а влияет на производительность getItem и действительно как-то связан со стандартным виндовым периодом таймера, так как у меня среднее время итерации 15,6 мс пополам.
Почему у вас такое отношения к багам от пользователей? Почему вы все время пытаетесь убедить, что программа ваша идельная , а пользователи тупые?

Разве вы не можете просто передать мою информацию (а по моему из работы тестового скрипта ее достаточно) разработчикам?
 
Сергей,
Вам наглядно было показано что у нас проблема не воспроизводится, а значит нам нужна дополнительная информация которую мы и пытаемся от Вас получить.
Вы, к сожалению, всеми силами отказываетесь нам эту информацию предоставить.
 
Цитата
Sergey Gorokhov написал:
Сергей,
Вам наглядно было показано что у нас проблема не воспроизводится, а значит нам нужна дополнительная информация которую мы и пытаемся от Вас получить.
Вы, к сожалению, всеми силами отказываетесь нам эту информацию предоставить.
Если я предоставлю тот же самый скрин, когда отключен терминал, этого будет достаточно?
Просто у меня пока нет возможности, потому что приходится каждый раз обновлять версию и откатывать. Я могу дать такой скрин позже, если это действительно нужно. Но это 100% будет тоже самое, потому что я вчера воспроизводил такие тормоза именно в оффлайне.
Какая еще дополнительная информация нужна?
 
Цитата
Сергей написал:
Какая еще дополнительная информация нужна?

Было два запроса:
Цитата
Sergey Gorokhov написал:
А если вообще убрать getItem из цикла?

Цитата
Sergey Gorokhov написал:
Повторите то же самое при отключенном терминале.
 
Сделал скрины









Все остальные скрипты во время тесты не были запущены, так что повлиять не могли.


Если вообще убрать вызов getItem из моего первого сообщения, естественно все быстро работает и не тормозит.
 
Никакие другие программы тоже не могли повлиять (я про изменение интервала таймера), так как у меня запущены одни и те же программы, когда я тестирую с версией 19 и с версией 27.
Может сам QUIK что-то стал делать с интервалом в последних версиях?
 
сегодня брокер обновил до 27 версии
у меня в таблице всего 8 строк, так что я поставил ccc=100000
результат такой
total_limits=800000 total_time_ms=67875 avg_ms=0.084844

мб проблема воспроизводится если какой-то другой скрипт тоже работает с этой таблицей или что-то в этом духе.
какая-то излишняя синхронизация появилась мб?

но у меня проблема как видите не воспроизвелась.
тестировал сейчас на подключенном к серверу терминале.
 
хотя может что и воспроизвелась у меня проблема, просто она экспоненциально зависит от числа строк в таблице
 
Цитата
Павел Bosco написал:
сегодня брокер обновил до 27 версии
у меня в таблице всего 8 строк, так что я поставил ccc=100000
результат такой
total_limits=800000 total_time_ms=67875 avg_ms=0.084844

мб проблема воспроизводится если какой-то другой скрипт тоже работает с этой таблицей или что-то в этом духе.
какая-то излишняя синхронизация появилась мб?

но у меня проблема как видите не воспроизвелась.
тестировал сейчас на подключенном к серверу терминале.
Спасибо что попробовали у себя. У вас тоже все нормально. Пока причина почему у меня не работает, непонятна. Я специально останавливал все другие скрипты во время теста. Кстати аналогичные действия с таблицей "futures_client_holding" на новой версии у меня отрабатывают корректно.
 
Сергей,

Пришлите нам архив всей папки с Вашим терминалом QUIK (без ключей доступа) на адрес quiksupport@arqatech.com
Архив следует паковать при закрытом терминале.
Страницы: 1
Читают тему
Наверх