Не работает отладка, профилировщик

 

У меня одного не работает отладчик и профилировщик

Стоит win7 x64 , памяти  4 Гб, 4-ядерный Phenom.   MT5 build 695

Также есть сообщение в ME - 2012.10.02 02:07:10 C++ compiler Microsoft Visual Studio 2010 found

 Когда то раньше отладчик точно работал.  

 
dimeon:

У меня одного не работает отладчик и профилировщик

Стоит win7 x64 , памяти  4 Гб, 4-ядерный Phenom.   MT5 build 695

Также есть сообщение в ME - 2012.10.02 02:07:10 C++ compiler Microsoft Visual Studio 2010 found

 Когда то раньше отладчик точно работал.  

 

Нужно установить VS 2010. Тогда и поедет.
 
Отладчик и профилировщик работают.

Обнаружение компилятора С++ касается только автоматической компиляции С/С++ кода.
 

Не правильно показывает профилировщик :(

Тест такой:

Чтение и запись csv файла размером в 2Гб в другой файл, происходит распознавание преобразование типов в соответствующее представление. Оперативки хватает, диск SSD

Засекается время чтения и сохранения

#include <Greshnik\\CSV fast.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong mc=GetMicrosecondCount();
   CSV c;
   c.Read_from_file("Save_Pred\\EURUSDCB_Save_Pred.csv");
   ulong mc1=GetMicrosecondCount();
   Print("Read= ",(mc1-mc)/1000.0);
   c.Write_to_file("Save_Pred\\EURUSDCB_Save_Pred_1.csv",true);
   Print("Write= ",(GetMicrosecondCount()-mc1)/1000.0);
  }

Цифры в миллисекундах такие:

2020.11.15 14:38:24.844 test3 (EURUSD,M1)       Read= 62121.937
2020.11.15 14:40:51.379 test3 (EURUSD,M1)       Write= 146534.424

У профилировщика своё представление о затратах времени процессора:

Ладно, тут не так это важно.

Это код самой требовательной по общему времени(реальному, а не профилировщика) функции:

Самая затратная строка с номером 4997, а не 4986

Пробуем убрать ускорить её, комментируем строку 4997, и раскомментируем следующую строку, результат такой:

2020.11.15 14:52:00.890 test3 (EURUSD,M1)       Read= 62175.355
2020.11.15 14:52:27.080 test3 (EURUSD,M1)       Write= 26189.829

Время записи сократилось более чем в 5,5 раза, чтение не изменилось

Поверим на слово профилировщику и заменим строку 4986:

2020.11.15 14:57:28.116 test3 (EURUSD,M1)       Read= 62286.274
2020.11.15 14:59:56.301 test3 (EURUSD,M1)       Write= 148185.048

Как будто мы ничего и не меняли, совсем как изначальный вариант.

Если сравнивать преобразование double и long в строку, то результат такой:

2020.11.15 15:04:01.552 test3 (EURUSD,M1)       Read= 62215.293
2020.11.15 15:04:41.996 test3 (EURUSD,M1)       Write= 40444.237

Запись в 3.7 раза быстрее изначального

Тестировали с таким вариантом:

return string(long(columns[col].data_double[row/CSV_base_size_a].arr[row%CSV_base_size_a]*100000000.0));
 
Обсуждение профилировщика
Обсуждение профилировщика
  • 2020.11.13
  • www.mql5.com
Вот профилировщик все улучшают и улучшают. А как им пользоваться? не понятно. Да, я понимаю, что чем больше процентов тем медленнее...
 

На текущий момент с современными оптимизирующими С++ компиляторами:

  1. Нужно забыть про соответствие строк
  2. Нужно забыть про сохранение мелких и средних функций. Даже среднего размера классы могут полностью терять свое тело, растворяясь.
  3. Оптимизация смешивает/пересортирует операции из разных строк с полным уничтожением границ высокоуровневых команд
  4. Разработчику нужно иметь серьезные познания в ассемблере и оптимизирующих компиляторах, чтобы понимать и правильно оптимизировать свои программы
  5. Наивные методы оптимизации и анализа программ 10-20 летней давности устарели из-за кратно возросшей мощи оптимизирующих компиляторов C++ (к MSVC относится слабо)
  6. Отчет профайлера имеет малое отношение к листингу программы
Мы планируем ограничить инлайнинг компилятора в режиме профайлинга, чтобы больше функций остались независимыми и картина потребления была чуть более отчетлива. Но смешивание и размытие границ все равно останутся.