Ошибки, баги, вопросы - страница 977

 
Renat:
не вызываются никакие GDI методы.

я про TextOut. он разве не системный?

про метку понятно, я её с GDI никак не ассоциирую

 
voix_kas:

Текст меняется во всех (половине) метках, предназначенных для отображения именно значения показателя, а не его описания. При запуске скрипта это видно.

Либо я Вас не понял. О какой конкретно строке идёт речь? 

Извините, я не то место смотрел с мобильника и ошибся.

Я течение ближайших часов проведу собственные тесты, выложу исходники и детальные результаты.

 
sergeev:

я про TextOut. он разве не системный?

про метку понятно, я её с GDI никак не ассоциирую

Я подумал, что с GDI шла речь об метках.

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

То есть, при модификации объектов реальное исполнение откладывается, что дает ощущение скорости. Ну и вся тяжесть отрисовки переносится на интерфейсный(графический) поток приложения. Причем при отрисовке работают методы оптимизации и отсечения границ видимости, что позволяет нормально работать с 300 000-500 000 объектов на чарте.

А вот при работе с битмапами вся работа сразу происходит в MQL5 без отсрочки, но зато потом при отрисовке все происходит мгновенно. И итогом время "модификация + отрисовка" у битмапа скорее всего будет быстрее при определенном количестве объектов. Особенно с учетом того, что битмап сохраняется между вызовами и можно лишь дорисовывать только то, что нужно, а не перестраивать все полотно.

Я проведу детальные тесты и опубликую результаты, показывающие работу объектов и битмапов в разных режимах.

 

Выложил результаты тестов в отдельную ветку: Тестирование производительности работы с отдельными текстовыми метками и битмапами на чарте

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

 
Renat:

Выложил результаты тестов в отдельную ветку: Тестирование производительности работы с отдельными текстовыми метками и битмапами на чарте

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

Т.е. способ ускорить реальный вывод информации - это недочёт? :)

Я здесь ранее уже описал, с какой целью были введены канва-шаблон и рабочая канва.

 

Давайте жить долго.

В справочнике MQL5 тип datetime указано https://www.mql5.com/ru/docs/basis/types/integer/datetime:  

"Диапазон значений от 1 января 1970 года до 31 декабря 3000 года. "

на самом деле максимальное значение  при   32535244799   это  3001.01.01 07:59:59
 

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
Тест идет по производительности, поэтому его нельзя засорять дополнительными операциями.
 

Совершенствования чистоты программирования ради хочу поинтересоваться у общественности вот чем.

Предположим, имеется некий флаг (bool Flag), объявленный на глобальном уровне. При наступлении некоторых событий/условий, необходимо установить определённое его значение.

Первый вариант:

if (некое условие) {
  Flag = false;
}

Второй вариант:

if (некое условие) {
  if (Flag) Flag = false;
}

Какой из вариантов:

1. Быстрее с точки зрения производительности?

2. Если так можно сказать, "более профессионален"?

 

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

 
voix_kas:

Совершенствования чистоты программирования ради хочу поинтересоваться у общественности вот чем.

Предположим, имеется некий флаг (bool Flag), объявленный на глобальном уровне. При наступлении некоторых событий/условий, необходимо установить определённое его значение.

Конечно первый вариант быстрее. Меньше инструкций, да еще и на одно сравнение/ветвление меньше.
 
Renat:
Конечно первый вариант быстрее. Меньше инструкций, да еще и на одно сравнение/ветвление меньше.
Спасибо.
Причина обращения: