Справка по MetaEditor

Профилирование кода

Профилирование кода

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

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

Многие программы, в особенности индикаторы, осуществляют какие-либо расчеты только при приходе нового тика (OnTick, OnCalculate). Таким образом, для оценки производительности приходится ждать поступления новых тиков в режиме реального времени. Используя профилирование на исторических данных, вы можете сразу давать нужную нагрузку и проверять работу программ даже в выходные дни, когда рынки закрыты.

Запуск профилирования

Откройте файл исходного кода программы (MQ4 или MQ5). В меню "Отладка" или на панели инструментов "Стандартная" нажмите "Начать профилирование на реальных данных Начать профилирование на реальных данных" или "Начать профилирование на исторических данных Начать профилирование на исторических данных".

После этого автоматически будет скомпилирована специальная версия программы для профилирования. В зависимости от выбранного типа профилирования программа будет запущена на обычном графике в торговой платформе или в тестере стратегий (в визуальном режиме).

Запуск профилирования на графике в торговой платформе

По умолчанию, приложение запускается на графике EURUSD H1. Для запуска на другом символе и периоде, укажите их на вкладке "Отладка" в настройках MetaEditor.

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

Далее остановите профилирование: удалите программу с графика или нажмите "Завершить профилирование Завершить профилирование" меню "Отладка" или на панели инструментов "Стандартная".

Для получения более точных результатов профилирования рекомендуется вручную удалять программу с графика вместо использования команды "Завершить профилирование Завершить профилирование".

Просмотр результатов профилирования

После завершения профилирования его результаты будут открыты во вкладке "Профилировщик" окна "Инструменты". Результаты можно посмотреть в двух режимах: по вызовам и по строкам. Для переключения между ними используйте контекстное меню.

Режим "Функции по вызовам"

Результаты профилирования

В этом режиме результаты профилирования представлены по функциям:

  • Функции — имя функции или метода класса.
  • Строка — строка, в которой осуществляется вызов функции. Если функция вызывается в нескольких местах программы, ее иконка будет помечена значком Раскрыть. При нажатии на нее будет открыта информация по каждому вызову.
  • Количество — количество вызовов функции за время работы программы.
  • Время — время выполнения функции в микросекундах, а также в процентах относительно времени исполнения всех функций. Время исполнения функции есть сумма времени исполнения всех функций, вызываемых внутри нее.
  • График — график по времени выполнения функций.

При помощи иконок указывается тип функций:

  • Пользовательская функция — пользовательская функция.
  • Системная функция — системная функция.
  • Функция обработки событий — функция обработки событий (On*).
  • Метод класса — метод класса.

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

  • Системная функция @global_initializations — информация по инициализации всех глобальных переменных.
  • Системная функция @global_deinitializations — информация по деинициализации всех глобальных переменных.

Чтобы перейти к просмотру функции в файле, дважды щелкните на ней левой кнопкой мыши.

В профилировщике отображаются не все функции, а только те, что были вызваны во время работы программы.

Режим "Функции по строкам"

Результаты профилирования

В этом режиме информация о времени работы программы представлена по строкам. Строки сгруппированы по функциям программы.

  • Функции — имя функции.
  • Строка — номер строки, для которой отображается информация. Чтоб просмотреть информацию по времени выполнения каждой строки функции, нажмите значок Раскрыть.
  • Количество — сколько раз был исполнен код в указанной строке.
  • Время — время исполнения кода в указанной строке в микросекундах и процентах. Показатели в процентах для каждой строки отображаются относительно времени исполнения функции. Процентные показатели для функций отображаются относительно времени исполнения всей программы.
  • График — график по времени выполнения.

Чтобы перейти к просмотру строке в файле, дважды щелкните на ней левой кнопкой мыши.

Контекстное меню

В контекстном меню доступны следующие команды:

  • Открыть — перейти к строке или функции в файле исходного кода. Это же действие можно выполнить двойным кликом мышью или нажатием Enter.
  • Развернуть все — развернуть все свернутые функции.
  • Свернуть все —  свернуть все развернутые функции.
  • Функции по строкам — перейти в режим просмотра результатов профилирования по строкам.
  • Функции по вызовам —  перейти в режим просмотра результатов профилирования по вызовам.
  • Экспорт — экспортировать результаты профилирования в формате Open XML (MS Office Excel), HTML (Internet Explorer) или CSV (текстовый файл).
  • Авторазмер — включить/выключить автоматическую установку размеров полей. Это же действие выполняется клавишей "A".
  • Сетка — включить/выключить сетку, разделяющую поля. Это же действие выполняется клавишей "G".