Причины тормозов при старте. Вскрытие покажет.

Страницы: 1
RSS
Причины тормозов при старте. Вскрытие покажет.
 
Всем,добрый день,
Предлагаю обсудить проблему тормозов при старте терминала.
-------------------
До последней прошедшей недели пользовался версией 8.7
Неоднократно пытался установить более свежую версию, но всегда получал тормоза и возвращался к 8.7
-------------------
На прошедшей неделе Сбербанк перешел на единый счет и мне пришлось устанавливать версии 12
так как исчезли параметры по фьючерсам.
-----------------------
Сначала установил версию 12.6 которая выложена у Сбербанка.
Получил увеличение объема занятой памяти терминалом в 2 раза с 600 Мбайт до 1200Мбайт и жуткие тормоза
--------------------------
По совету разработчиков установил новую версию 12.8.4
Объем занимаемой памяти при старте сократился с 1200 до 900.
Почему он изменяется ?
-----------------------------
Самое странное, что во время торгов объем занимаемой памяти постепенно уменьшается.
Если никаких действий не совершать , то объем занимаемой памяти сокращается до 50Мбайт.
Но если начать что-то делать, то он снова увеличивается, но не более 700, а иногда и не более 350Mбайт.
--------------------
Трудно что-либо придумать почему так происходит.
--------------------------
Но так как максимальный объем всегда получается при старте и это приводит к очень длительной загрузки, то
давайте обсудим возможные причины этого.
----------------------------
Время старта можно разделить на три этапа.
Первый - запуск терминал.
Второй -ввод пароля
Третий- ввод кода со смартфона.
-------------------
самый короткий интервал - второй. Задержки при нем пока не будем рассматривать.
-----------------
Сначала я предположил, как и многие на форуме, что проблема медленной загрузки  в длительном получении начальной информации с сервера брокера.
Но теперь у меня другая рабочая гипотеза.
=================
Основа ее в том, что время первого и третьего этапов одинаковое.
Характерно , первый и третий этапы имеют одинаковое значение времени исполнения  -в моем случае это по 4 минуты каждый.
Но в первом этапе нет никакой связи с сервером.
Получается, что соединение с сервером не влияет ни на объем занимаемой памяти ни на время старта.
=================
Поэтому я считаю, что указанные проблемы (время старта и объем занимаемой памяти )
связаны исключительно  с вычислениями, которые совершает терминал при старте.
=====================
Более того, эта гипотеза подтверждается тем, что в третьем этапе терминал сначала уменьшает объем занятой памяти
до 350 Мбайт. А потом медленно начинает увеличивать его до тех же 900 Мбайт что и в первом этапе.
=====================
Как правило время и занятая память у всех пользователей разные.
Это связано с конкретной настройкой интерфейса. Т е числом окон с графиками, числом таблиц и стаканов и числом скриптов на Lua.
=====================
Полагаю, что максимальный объем памяти в момент старта возникает по причине, возможно не единственной, но одной из основных,
РАСЧЕТА ИНДИКАТОРОВ НА LUA.
========================
Известно, что индикаторы на луа вычисляются  несколько раз при открытии графика.
----------------------------------------
В результате такого расчета возникает куча мусора от этих расчетов, так как сборщик мусора при старте не работает.
------------------------
В начале третьего этапе терминал удаляет все расчеты первого этапа и память сокращается.
-------------------------
Так как у меня установлена подписка вручную, то ничего нового при соединении с сервером не приходит.
---------------------------------
Терминал снова начинает свой расчет индикаторов и графиков и это увеличивает объем памяти до максимума для всей сессии.
-------------------------
Но это еще не все.
Длительный расчет индикаторов и графиков при старте связан с тем, что хотя все свечи от первой до последней имеются в начале расчета,
Расчет индикаторов, а возможно и построение графиков выполняется для каждой свечи отдельно в цикле Calculate.
Так как большинство индикаторов - это интегральная обработка данных в окне,
то при 3000 свечах (это то что сохраняет сервер) для каждого индикатора
в цикле при старте вычисления в скользящем окне выполняются 3000 и более раз.
Если история сохраняется на ПК, то со временем тормоза и объем занимаемой памяти растет.
--------------------------------
Предположу, что это тупиковый момент в развитии QUIK и он требует кардинальных изменений.
---------------------------
Еще заметил, что число подписанных инструментов не влияет на объем и время при старте.
------------------------
Резюме:
На объем и время при старте  влияет повторный расчет индикаторов на Lua,
циклический расчет индикаторов (возможно и графиков) для каждой свечи при старте
и размер сохраненной истории, по которым считаются эти индикаторы.
----------------------------
Тот факт, что объем памяти при старте версии 12.6 на 300 Мбайт больше, чем при старте версии 12.8 говорит о том,
что, как говорил сатирик "что-то не так в консерватории"
-------------------------
Возможно, решением было бы исключение повторных расчетов индикаторов и принудительный запуск сборщика мусора при завершении третьего этапа.
-------------------------
Исследования продолжаются....
=========================
P.S. В настоящее время кувыркаюсь с единим счетом. Постоянно исчезают позиции по фьючерсам.
Кроме того, как уже писал на форуме,но без ответа, сваливание в кучу информации об акциях и фьючерсах имеет не только систематические ошибки, но и противоречит ФЗ "О рынке ЦБ"
Но это уже другая история  
 
После указанное выше рабочей гипотезы, я добавил в индикаторы сборщик мусора в начале расчета.
-------------------------
Не берусь утверждать, является ли это причиной,
но сегодня при старте  объем занятой памяти составил 875 Мбайт,
а время третьего этапа составило 2 минуты.
--------------------
Так как это лишь единственный эксперимент, то исследования продолжаются.
 
Цитата
nikolz написал:
На объем и время при старте  влияет повторный расчет индикаторов на Lua,
 циклический расчет индикаторов (возможно и графиков) для каждой свечи при старте
  и размер сохраненной истории, по которым считаются эти индикаторы.
Но как вы догадались, Холмс?  :lol:
Расчёт индикатора при старте не должен сильно отличаться от расчёта при его добавлении на график. При добавлении даже три раза пересчитывается, а при старте терминала - "только" два раза.
Но если в индикаторе используется getCandlesByIndex, то есть свои нюансы в расчётах.
Чтобы оценить влияние Lua-индикаторов, можно переименовать папку LuaIndicators, и сравнить время загрузки с индикаторами и без.
 
Цитата
Йцукен написал:
Цитата
nikolz написал:
На объем и время при старте  влияет повторный расчет индикаторов на Lua,
 циклический расчет индикаторов (возможно и графиков) для каждой свечи при старте
  и размер сохраненной истории, по которым считаются эти индикаторы.
Но как вы догадались, Холмс?  
Расчёт индикатора при старте не должен сильно отличаться от расчёта при его добавлении на график. При добавлении даже три раза пересчитывается, а при старте терминала - "только" два раза.
Но если в индикаторе используется getCandlesByIndex, то есть свои нюансы в расчётах.
Чтобы оценить влияние Lua-индикаторов, можно переименовать папку LuaIndicators, и сравнить время загрузки с индикаторами и без.
Приведите доказательства, Ватсон.
 
nikolz, доказательства чего?
Страницы: 1
Читают тему
Наверх