Новая версия платформы MetaTrader 5 build 2650: Фоновая загрузка графиков и улучшения в профилировщике MQL5-кода - страница 2

 
Stanislav Korotky:

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

Когда в функции происходит пауза, эта функция есть в стеке вызовов и потому это должно отражаться увеличением общего счетчика. Про "счетчик вызовов" функции ничего не было сказано, упомянуты только счетчик появления на стеке и счетчик нахождения внутри функции.

Да, нужно документированное пояснение, как анализировать значения.

А разве "вызов функции", и "функция есть в стеке вызовов", это разное понимание?
Вызвали функцию, спровоцировали её размещение в стек.
Не вызвали, значит её там нет.
Соответственно простыми словами, получается счётчик вызовов функции (счетчик появления на стеке).

 

Поведение профайлера полностью аналогично остальным C++ компиляторам.

Попробуйте новый профайлер и все станет ясно.

 
Roman:

Да, нужно документированное пояснение, как анализировать значения.

А разве "вызов функции", и "функция есть в стеке вызовов", это разное понимаете?
Вызвали функцию, спровоцировали её размещение в стек.
Не вызвали, значит её там нет.
Соответственно простыми словами, получается счётчик вызовов функции (счетчик появления на стеке).

В новом профилировщике все счетчики - это счетчики прерывания профилируемого кода самим профилировщиком. Если функция посчиталась на стеке 1 раз, это не значит, что между соседними 1-миллисекундными интервалами прерываний её не вызвали 100 раз вместо 1. Иными словами, подсчет вызов не ведется в принципе. Пожалуй, это может ввести в заблуждение, и раньше эта инфа бывала полезной для отладки и понимания, "откуда ноги растут".

Может быть они подразумевают, что самая вложенная функция, то есть текущая в которой произошла пауза, не находится в стеке, но имхо это было бы странно.

 
Renat Fatkhullin:

Поведение профайлера полностью аналогично остальным C++ компиляторам.

Попробуйте новый профайлер и все станет ясно.

А документации не будет? Только метод тыка?

В MS показывается время, а не счетчики.

 
Stanislav Korotky:

В новом профилировщике все счетчики - это счетчики прерывания профилируемого кода самим профилировщиком. Если функция посчиталась на стеке 1 раз, это не значит, что между соседними 1-миллисекундными интервалами прерываний её не вызвали 100 раз вместо 1. Иными словами, подсчет вызов не ведется в принципе. Пожалуй, это может ввести в заблуждение, и раньше эта инфа бывала полезной для отладки и понимания, "откуда ноги растут".

Может быть они подразумевают, что самая вложенная функция, то есть текущая в которой произошла пауза, не находится в стеке, но имхо это было бы странно.

Понятно, то есть по принципу try catch 
Если в стеке, то считаем. То есть контроль чистой отработки.

 
Stanislav Korotky:

А документации не будет? Только метод тыка?

В MS показывается время, а не счетчики.

А чего сложного? Даже код подкрашивается от степени нагрузки.

Общий принцип невмешивающегося(без встраивания своего кода внутрь проверяемого, без инструментации) профилирования един для всех.

И в Visual Studio ровно такие же отчеты как и у нас:



Везде относительные цифры затрат, а не чистое абсолютное время.



Всегда надо учитывать, что при профайлинге семплингом(мы пока используем частоту 1000 раз в сек, но будем автоматически увеличивать частоту на более мощных процессорах) всегда происходят потери мелких функций или участков кода. Это касается любого языка и является основой метода.

Поэтому все цифры относительные и статистические. Говорить об абсолютном времени затрат не совсем корректно.

 

глюк с иконкой сообщения снова не исправили

 
Renat Fatkhullin:

Поведение профайлера полностью аналогично остальным C++ компиляторам.

Попробуйте новый профайлер и все станет ясно.

Раньше было количество выполнений функций, а сейчас не вижу. Была полезная штука.
Эта всплывающая подсказка, как я понимаю, не количество, а относительные затраты, которые выражаются пока не ясно в чем?
И эти нули - это просто еще недопилили?


И, надеюсь, эти ужасные красные горизонтальные маркеры на всю ширину - временное явление.


 
Renat Fatkhullin:


Ренат, ну сделайте пожалуйста окна графиков терминала, как подсказка в редакторе.
Шикарное окно для чарта, с такой рамкой и заголовком.

И нужно ли отображать поле скрола в данном случае. Мне кажется лишнее.

w

 
Nikolai Semko:

Раньше было количество выполнений функций, а сейчас не вижу. Была полезная штука.
Эта всплывающая подсказка, как я понимаю, не количество, а относительные затраты, которые выражаются пока не ясно в чем?
И эти нули - это просто еще недопилили?


И, надеюсь, эти ужасные красные горизонтальные маркеры на всю ширину - временное явление.

Почитайте про разницу и преимущества профайлинга через семплинг и инструментацию.

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

Поиграйтесь с новым профайлером и вы часто увидите, что пропадут практически все мелкие и средние функции - все они уйдут в агрессивный инлайнинг. Чтобы увидеть их, воспользуйтесь новой настройкой отключения инлайнинга в профилировке.

С визуальным дизайном будем дальше экспериментировать, но это достаточно удобно получилось. Аналогично в Visual Studio 2019.