DirectX - страница 8

 
Реter Konow:

Вот, слепил вчера пример стакана, ячейки которого перерисовываются независимо от канваса всего окна: https://www.mql5.com/ru/forum/333652/page4 

Показывается, что отдельная перерисовка ячеек держит нагрузку в пределах 20% (на видео больше из за записи видео), ДАЖЕ, если ячейки перерисовываются ВСЕ и на частоте 40 fps. Обычная динамика стакана при этом подходе будет грузить на 5-10% ориентировочно.

Нагрузка велика только в том случае, если перерисовка большой площади (~500*500 рх) на высокой частоте без пауз (~40+ fps). Любые задержки или уменьшение области перерисовки снижают нагрузку в разы.

В Вашем примере стакан весьма усечен конечно, в том числе по глубине. Смешно, но видимо отрисовку стакана нужно считать на всех ядрах с OpenCL, к тому же раз расчет разбит на отдельные ячейки, но тут я теоретик.

 
Aleksey Vyazmikin:

В Вашем примере стакан весьма усечен конечно, в том числе по глубине. Смешно, но видимо отрисовку стакана нужно считать на всех ядрах с OpenCL, к тому же раз расчет разбит на отдельные ячейки, но тут я теоретик.

Ладно, сделаю стакан с большим количеством ячеек и проверю еще раз.

 
Реter Konow:

Ладно, сделаю стакан с большим количеством ячеек и проверю еще раз.

только не делай статичным, а динамичным

 
Rafil Nurmukhametov:

Процессор грузит хорошо, на предыдущей картинке видно открытую позицию, рамка вокруг цены цвета мадженты, там позиция в минусе, на картинке ниже позиция в плюсе

По моим ощущениям такое изображение должно формироваться не более 1-3 миллисекунд. Если дольше,  то где-то какой-то косяк.
 
Rafil Nurmukhametov:

только не делай статичным, а динамичным

Что имеешь ввиду под "динамичным"? Чтобы не все ячейки одновременно меняли значения? Не понял.

 
Nikolai Semko:
По моим ощущениям такое изображение должно формироваться не более 1-3 миллисекунд. Если дольше,  то где-то какой-то косяк.

Вот ты мне планку поднял для совершенства... Может опустишь до 6-8 миллисекунд? 

 
Реter Konow:

Что имеешь ввиду под "динамичным"? Чтобы не все ячейки одновременно меняли значения? Не понял.

чтобы текущая цена двигалась по ячейкам, а не была по середине как в стакане мт5

 
Rafil Nurmukhametov:

чтобы текущая цена двигалась по ячейкам, а не была по середине как в стакане мт5

То есть, без централизации. Ну, для фьючерсных инструментов действительно именно такой стакан нужен. Ок. (это просто макет для проверки нагрузки).

 
Rafil Nurmukhametov:

Вот ты мне планку поднял для совершенства... Может опустишь до 6-8 миллисекунд? 

это слишком много. Даже 3 это много. 6-8 при 30 кадров в секунду - 20-30% процессорного времени. 
Нужно использовать по максимуму ArrayCopy там где это возможно. Прозрачность тоже нужно использовать по минимуму только там, где это необходимо.
Можно прогнать через профилирование и посмотреть где макс. утечка ресурсов процессора. 
Ну и Петр , конечно же прав, перерисовывать нужно локально, там, где произошли изменения, но не весь канвас заново формировать каждый раз.
А использование DX вобще может разгрузить проц очень сильно 
 

Ок, смастерил стакан в редакторе. Ушло 2 часа. Много возни. Можно ускорить процесс в четыре раза добавив инструменты.

Проверил.

Результат: менее 20% нагрузки при постоянном изменении всех ячеек аск и бид, и одной ячейки цены, на частоте 40 кадров в секунду. (при включенной записи нагрузка поднимается на 5-7 процентов).


Повторю свое мнение - в реальных условиях нагрузка будет 5 - 10 процентов в зависимости от активности рынка.

Файлы:
GUI_Expert.ex5  600 kb
Причина обращения: