Тут как то быстро отрабатывают ...My функции, вообще не затрачивая времени ))
ulong s2 = GetMicrosecondCount(); int tH = TimeHourMy(631142400); int tM = TimeMinuteMy(631142400); ulong s3 = GetMicrosecondCount(); Print((string)tH, " Hour"); Print((string)tM, " Minutes"); Print( "Clock: ", (string)s2, " mics, ", (string)s3, " mics" );
2019.11.15 10:08:23.482 TestScript (EURUSD,M1) 21 Hour 2019.11.15 10:08:23.482 TestScript (EURUSD,M1) 20 Minutes 2019.11.15 10:08:23.482 TestScript (EURUSD,M1) Clock: 176 mics, 176 mics
И в цикле тоже показывает чудеса ))
int tH = 0; int tM = 0; ulong s2 = GetMicrosecondCount(); for ( datetime t = 631142400123456; t <= 1893446400123456; t++ ) { tH = TimeHourMy(t); tM = TimeMinuteMy(t); } ulong s3 = GetMicrosecondCount(); Print((string)tH, " Hour"); Print((string)tM, " Minutes"); Print( "Clock: ", (string)s2, " mics, ", (string)s3, " mics" );
2019.11.15 11:33:04.239 TestScript (EURUSD,M1) 7 Hour 2019.11.15 11:33:04.239 TestScript (EURUSD,M1) 37 Minutes 2019.11.15 11:33:04.239 TestScript (EURUSD,M1) Clock: 158 mics, 158 mics
TimeHourMy, TimeMinuteMy не учитывают переводы стрелок и можно сильно влететь. То есть быстрые, но неверные :-)
Что то жесть как быстрые, аж не вериться ))
Возможно новый компилятор делает своё дело.
long tH = 0; long tM = 0; ulong s2 = GetMicrosecondCount(); for ( long t = 0; t <= 1893446400000000; t++ ) { tH = TimeHourMy(t); tM = TimeMinuteMy(t); } ulong s3 = GetMicrosecondCount(); Print((string)tH, " Hour"); Print((string)tM, " Minutes"); Print( "Clock: ", (string)s2, " mics, ", (string)s3, " mics" );
2019.11.15 11:52:04.771 TestScript (EURUSD,M1) 21 Hour 2019.11.15 11:52:04.771 TestScript (EURUSD,M1) 20 Minutes 2019.11.15 11:52:04.771 TestScript (EURUSD,M1) Clock: 182 mics, 182 mics
Тут как то быстро отрабатывают ...My функции, вообще не затрачивая времени ))
Компилятор просто удаляет этот код, потому что он ничего не делает (все значения известны на этапе компиляции).
TimeHourMy, TimeMinuteMy не учитывают переводы стрелок и можно сильно влететь. То есть быстрые, но неверные :-)
Каким боком летнее время может повлиять?
Значения я сравнивал на диапазоне 1990-2030 гг, совпадение 100%
Компилятор просто удаляет этот код, потому что он ничего не делает (все значения известны на этапе компиляции).
А если так, одна микросекунда.
long tH = 0; long tM = 0; ulong s2 = GetMicrosecondCount(); tH = TimeHourMy(TimeCurrent()); tM = TimeMinuteMy(TimeCurrent()); ulong s3 = GetMicrosecondCount(); Print((string)tH, " Hour"); Print((string)tM, " Minutes"); Print( "Clock: ", (string)s2, " mics, ", (string)s3, " mics" );
2019.11.15 13:09:09.716 TestScript (EURUSD,M1) 12 Hour 2019.11.15 13:09:09.716 TestScript (EURUSD,M1) 9 Minutes 2019.11.15 13:09:09.716 TestScript (EURUSD,M1) Clock: 158 mics, 159 mics
То же самое на MqlDateTime, 1 mics
long tH = 0; long tM = 0; ulong s2 = GetMicrosecondCount(); tH = TimeHour(TimeCurrent()); tM = TimeMinute(TimeCurrent()); ulong s3 = GetMicrosecondCount(); Print((string)tH, " Hour"); Print((string)tM, " Minutes"); Print( "Clock: ", (string)s2, " mics, ", (string)s3, " mics" );
2019.11.15 13:24:27.454 TestScript (EURUSD,M1) 12 Hour 2019.11.15 13:24:27.454 TestScript (EURUSD,M1) 24 Minutes 2019.11.15 13:24:27.454 TestScript (EURUSD,M1) Clock: 294 mics, 295 mics
Почитайте посты @Renat Fatkhullin про оптимизатор компилятора и про то, как делать замеры.
Почитайте посты @Renat Fatkhullin про оптимизатор компилятора и про то, как делать замеры.
Так если оптимизатор всё и вся оптимизирует, как тогда сделать замеры?
Вы же сами об этом и спрашивали.
Тогда
зацикливать в реал тайм, и выводить в коммент, и смотреть значения.
Ваш вопрос был в непонимании почему у вас получается ноль.
По моему я наглядно показал откуда он берётся.
И
замеры лучше делать по отдельности, так как кто его знает, что там решит компилятор.
Так если оптимизатор всё и вся оптимизирует, как тогда сделать замеры?
Вы же сами об этом и спрашивали.
Тогда
зацикливать в реал тайм, и выводить в коммент, и смотреть значения.
Ваш вопрос был в непонимании почему у вас получается ноль.
По моему я наглядно показал откуда он берётся.
И
замеры лучше делать по отдельности, так как кто его знает, что там решит компилятор.
Вопрос про 0 был не главный. Это, скорее, констатация факта была. И мне самому лень искать способы обмануть компилятор.
Замеры провел также в тестере, там компилятор бессилен. Результаты очень близкие, а хочется ускорения.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Попытался ускорить TimeHour/TimeMinute, ни фига не получилось:
Оба варианта работают примерно одинаково под профилировщиком:
И в тестере (второй чуть быстрее, но незначительно).
Под дебагом TimeToStruct-вариант ускоряется почти в 10 раз, тогда как "математический" — всего в 2.5:
При компиляции в релиз (F7), "математический" вариант оптимизируется компилятором в 0, и как он реально работает — не понятно (есть идеи как проверить?):
Интуитивно кажется, что должен быть вариант раз хотя бы в 10 быстрее, чем TimeToStruct. Но придумать не могу.
Кто поможет?