В принципе, мой код сейчас позволяет разделить таймер и тики, можно так и сделать , но не уверен, что в будущем можно будет этого избежать. Но вопрос не в этом, а в том, что показания по данной функции неправдоподобно большие.
sergeev: а вы не могли предположить (или догадаться на крайний случай), что OnTick и OnTimer - это два независимых события?
Возможно, я здесь упустил очень важный момент. Действие, которое необходимо выполнять, очень тяжелое - считывание истории котировок по нескольким инструментам + различные коррекции, вычисления. Поэтому цель была не только выполнять что-то не реже раза в 1 секунду, не пропуская новые тики, но и делать это как можно реже. Но оказалось, что профилировщик показывает, что установка таймера намного медленнее, чем даже все эти медленные действия. Это очень странно, и вопрос здесь только в этом.
Если бы мне было интересно мнение об оптимизации моего кода, я бы его
попросил, причем в отдельной ветке. Не надо здесь оффтопить и предлагать
свои решения, основанные на частичной информации, я все равно не дам
вам все, для решения вопроса по профилировщику это не нужно, а вопрос
исключительно по профилировщику и функции установки таймера.
flops: Возможно, я здесь упустил очень важный момент. Действие, которое необходимо выполнять, очень тяжелое - считывание истории котировок по нескольким инструментам + различные коррекции, вычисления. Поэтому цель была не только выполнять что-то не реже раза в 1 секунду, не пропуская новые тики, но и делать это как можно реже. Но оказалось, что профилировщик показывает, что установка таймера намного медленнее, чем даже все эти медленные действия. Это очень странно, и вопрос здесь только в этом.
Если история была считана один раз, то она кешируется и следующее считывание происходит намного быстрее, так что вы зря вцепились в оптимизацию того что уже оптимизировано на уровне языка.
Критикуя, - предлагайте.
Как насчет чтения справки - https://www.mql5.com/ru/docs/eventfunctions/eventsettimer
Не понял, как это решает задачу:
Если я просто поставлю таймер, то буду пропускать тики. Если я буду работать только каждый тик, то время между ними может оказаться больше 1 секунды.
Не понял, как это решает задачу:
Если я просто поставлю таймер, то буду пропускать тики. Если я буду работать только каждый тик, то время между ними может оказаться больше 1 секунды.
а вы не могли предположить (или догадаться на крайний случай), что OnTick и OnTimer - это два независимых события?
При большой стоимости вы возможно больше тиков потеряете за счет медленной установки таймера, чем на быстрой обработке его единожды установленного.
Проверяйте короче.
При большой стоимости вы возможно больше тиков потеряете за счет медленной установки таймера, чем на быстрой обработке его единожды установленного.
Проверяйте короче.
медленная реализация EventSetTimer()
Возможно, я здесь упустил очень важный момент. Действие, которое необходимо выполнять, очень тяжелое - считывание истории котировок по нескольким инструментам + различные коррекции, вычисления. Поэтому цель была не только выполнять что-то не реже раза в 1 секунду, не пропуская новые тики, но и делать это как можно реже. Но оказалось, что профилировщик показывает, что установка таймера намного медленнее, чем даже все эти медленные действия. Это очень странно, и вопрос здесь только в этом.