Новая версия платформы MetaTrader 5 build 2755: Улучшения в окне котировок и отладчике - страница 24
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Работу отладчика в 2772 поправили.
Профилировщик наконец-то нормально стал считать, в 2770 какие-то ужасы выдавал
в Профилировщике как раньше уже не будет столбца с кол-вом вызовов?
Профилировщик наконец-то нормально стал считать, в 2770 какие-то ужасы выдавал
в Профилировщике как раньше уже не будет столбца с кол-вом вызовов?
Не будет, это же вероятностный семплинг.
Так как мы переходим на новый отладчик, еще некоторое время возможны ошибки. Но все поправим и обогатим функционал.Не будет, это же вероятностный семплинг.
но там можно видеть непонятные вызовы, логические ошибки
но там можно видеть непонятные вызовы, логические ошибки
Согласен.
но там можно видеть непонятные вызовы, логические ошибки
То, что вы можете принять за непонятные вызовы или "логические ошибки", является обычно результатом оптимизатора кода с громадной частью инлайна и переупорядочивания инструкций.
Это же профайлинг релизной оптимизированной версии, а не отладочной с отключенным оптимизатором.
Профайлинг, основанный на семплинге, показывает горячие места оптимизированного кода. Именно оптимизированного. И это лучше, чем обманываться на наивном профайлинге дебаг кода, который отличается от релизного в 5-10 раз.
Особенность любого классического семплинга в том, что он может не замечать не замечает мелкие функции. Потому что чаще всего этих функций даже нет - они растворяются инлайнингом и перемешиваются с инструкциями вызывающей стороны.
Поэтому все правильно работает - концентрируйтесь на расшивании узких мест, а не считайте профайлинг контролем покрытия/coverage кода.
Профилировщик наконец-то нормально стал считать, в 2770 какие-то ужасы выдавал
перетестировал, вроде не было изменений, период маленький был 1-2 дня на М1, показывал ерунду,
недельный тест логически правильно показывает результат, но сильно не хватает столбца "кол-во вызовов"
add
пример, у меня часто не создается хендл при первом старте после загрузки window и вот этот скрин меня заставил думать, что эти хендлы создаются по кругу, установил печать на функцию пересоздания хендла в случае ошибки и вроде не заходит туда, а на картинке видно, что затраты на функцию создания хендла большие, позже выяснил, что вызывается все 1 раз, просто малый период теста показывает ерунду в профилировщике
То, что вы можете принять за непонятные вызовы или "логические ошибки", является обычно результатом оптимизатора кода с громадной частью инлайна и переупорядочивания инструкций.
Это же профайлинг релизной оптимизированной версии, а не отладочной с отключенным оптимизатором.
Профайлинг, основанный на семплинге, показывает горячие места оптимизированного кода. Именно оптимизированного. И это лучше, чем обманываться на наивном профайлинге дебаг кода, который отличается от релизного в 5-10 раз.
Особенность любого классического семплинга в том, что он может не замечать не замечает мелкие функции. Потому что чаще всего этих функций даже нет - они растворяются инлайнингом и перемешиваются с инструкциями вызывающей стороны.
Поэтому все правильно работает - концентрируйтесь на расшивании узких мест, а не считайте профайлинг контролем покрытия/coverage кода.
Речь о том, что когда видишь 100 000 вызовов функции, которая должна была вызваться всего 10 раз, то начинаешь искать ошибку в своем коде.
Сейчас нельзя сделать профайл не релизной версии с таким показателем.
То, что вы можете принять за непонятные вызовы или "логические ошибки", является обычно результатом оптимизатора кода с громадной частью инлайна и переупорядочивания инструкций.
Это же профайлинг релизной оптимизированной версии, а не отладочной с отключенным оптимизатором.
Профайлинг, основанный на семплинге, показывает горячие места оптимизированного кода. Именно оптимизированного. И это лучше, чем обманываться на наивном профайлинге дебаг кода, который отличается от релизного в 5-10 раз.
Особенность любого классического семплинга в том, что он может не замечать не замечает мелкие функции. Потому что чаще всего этих функций даже нет - они растворяются инлайнингом и перемешиваются с инструкциями вызывающей стороны.
Поэтому все правильно работает - концентрируйтесь на расшивании узких мест, а не считайте профайлинг контролем покрытия/coverage кода.
Я профилировал эксперта на истории M1 OHLC за 21 год (15К трейдов). Вот что получил:
Эта функция вызывается один раз при инициализации эксперта, затрачивает микросекунды или миллисекунды из всего теста в почти 3 минуты.
Посоветуйте, как мне получить какие-нибудь полезные данные? Это не сарказм. Мне надо оптимизировать код.
Посмотрите бета-версию 2772, пожалуйста.
Часть файловых операций мы ускорили. В Windows окружении надо ставить путь /MQL5/Files папки в пропуск у штатного Windows Defender антивируса, чтобы он не пытался анализировать эти тысячи файлы.
Очень сильно ускоряет работу с файлами при таком их количестве.
Пока не помогло.
build 2772 Ubuntu 18.04 wine-stable 5.0.2~bionic
2021.02.03 00:18:17.250 speedtest2 (EURUSD,H1) size1 100 size2 1000 t 42139
2021.02.03 00:21:15.711 speedtest2 (EURUSD,H1) size1 1 size2 20000 t 108880
2021.02.03 00:23:57.881 speedtest2 (EURUSD,H1) size1 20 size2 1000 t 8677
Цифры чуть хуже, но это другая виртуалка, с одним ядром, и диск у неё не в .raw формате, а в .qcow2, он может быть медленнее.
Впрочем, цифры выросли непропорционально.
Ну и да, антивируса у меня нет, и в этих виртуалках, кроме MT-ME, вообще практически ничего нет.
Думаю, проблема может быть связана с трансляцией вызовов через Wine, кроме того, EXT4 и сама не очень любит много файлов в каталоге (что не мешает аналогичному bash-скрипту отрабатывать на порядки быстрее - real 0m0.855s при 20000 файлов в 1 каталоге).
Речь о том, что когда видишь 100 000 вызовов функции, которая должна была вызваться всего 10 раз, то начинаешь искать ошибку в своем коде.
Сейчас нельзя сделать профайл не релизной версии с таким показателем.
Покажите полный отчет в нескольких видах с четкими доказательствами.
Вы в курсе, что в контекстном меню есть переключение режимов показа профилировщика и есть раскрываемая по клику детализация?
Вы точно задумываетесь над моими словами про инлайниг? Зачастую из 30 функций остается только 3.