О профилировщике кода MT5 - страница 6

 
fxsaber #:

Только не понял, почему 45%-строки и остальные не стали брать в расчет?

Они включают в себя те нативные функции, о нагрузке которых я писал.

RefreshHistory состоит из HistorySelect и HistoryOrderGet, GetHistoryPositionData — из них же + HistoryDealGet.

Еще помогает пробежаться по коду глазами и проанализировать самые красные строки. Правда, они не всегда подкрашиваются, если код чуть сложнее простыни.

 
fxsaber #:

29.41% (непонятно от чего) приходится на закрывающую метод скобку уже после return. Сложно интерпретировать.

Удаление локальных переменных функции, локальных объектов, и т.д.

Это делается после любого return-а из функции.

 
Andrey Khatimlianskii #:

Удаление локальных переменных функции, локальных объектов, и т.д.

Это делается после любого return-а из функции.

Там только три ulong-переменные.

 
fxsaber #:

Добавил 20-ти кратное повторение на большой истории.

29.41% (непонятно от чего) приходится на закрывающую метод скобку уже после return. Сложно интерпретировать.

А что в отчёте по этой функции ?

Покажите пожалуйста

 
Ilyas #:

А что в отчёте по этой функции ?

Покажите пожалуйста

MQL Profiler Report - \MQL5\Experts\Test19.mq5
Function Line Total CPU Percentage Self CPU Percentage
MT4ORDERS::GetHistoryPositionData 1093 701
85.38%
260
31.67%
   } 1360 157
21.96%
157
60.38%
   static void GetHistoryPositionData( const ulong Ticket ) 1093 46
6.43%
46
17.69%
   const string StrComment = ::HistoryDealGetString(OpenTicket, DEAL_COMMENT); 1178 23
3.22%
11
4.23%
   MT4ORDERS::Order.Comment = ::HistoryDealGetString(Ticket, DEAL_COMMENT); 1107 20
2.80%
10
3.85%


Не уверен, что эта информация нужна. К сожалению, пока очень плохо понимаю цифры. Хочется разобраться.


ЗЫ В таблице выше две строки с одной и той же Line=1093. Может, какие данные для воспроизведения предоставить в ЛС?

 
fxsaber #:

Там только три ulong-переменные.

И все, что вызывалось из этой функции.

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

 
Andrey Khatimlianskii #:

И все, что вызывалось из этой функции.

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

Имел в виду закрывающую скобку.

 
fxsaber #:

Имел в виду закрывающую скобку.

Я о ней же )

Возможно, сам что-то неправильно понимаю.

 

Лог Тестера (без Визуализации) после работы профилировщика.

2021.11.08 03:21:54.358 Core 1  EURUSD,M1: 6820008 ticks, 258262 bars generated. Environment synchronized in 0:00:00.018. Test passed in 0:00:22.853 (including ticks preprocessing 0:00:01.219).
2021.11.08 03:21:54.358 Core 1  EURUSD,M1: total time from login to stop testing 0:00:22.871 (including 0:00:00.018 for history data synchronization)
2021.11.08 03:21:54.358 Core 1  disconnected
2021.11.08 03:21:54.358 Core 1  1578 Mb memory used including 24 Mb of history data, 192 Mb of tick data


Сразу после этого руками нажимается кнопка Старт в Тестере.

2021.11.08 03:23:00.166 Core 1  EURUSD,M1: 6820008 ticks, 258262 bars generated. Environment synchronized in 0:00:00.029. Test passed in 0:00:07.548 (including ticks preprocessing 0:00:01.203).
2021.11.08 03:23:00.166 Core 1  EURUSD,M1: total time from login to stop testing 0:00:07.577 (including 0:00:00.029 for history data synchronization)
2021.11.08 03:23:00.166 Core 1  444 Mb memory used including 24 Mb of history data, 192 Mb of tick data


  1. Почему во время профилирования время прохода в три раза больше?
  2. Почему во время профилирования потребление памяти в три раза больше?
 

Профилировщик показывает вызовы функций, которых на самом деле не было. Нарвался даже на такое:

Какой-то ArrayCopy, которого нет в исходнике mqh-файла! При этом еще красной строкой выделил объявление статик-массива.

Так и не получается пользоваться профайлером, к сожалению.

Причина обращения: