Ошибки, баги, вопросы - страница 2749

 
Roman:

На предыдущей странице fxsaber привёл замеры.
Я пояснил почему так происходит.
Выделяйте всегда память, статически или динамически.

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

Но судя по коду, если там сравнивается вот это макрос

GetCurrentTick2(Tick, !i)

то здесь происходит лишь один вызов функции на 100 итераций.  А в первом макросе - вызов на каждой итерации.  Так что ерунда какая-то.

 
Alexey Navoykov:

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

Но судя по коду, если там сравнивается вот это макрос

то здесь происходит лишь один вызов функции на 100 итераций.  А в первом макросе - вызов на каждой итерации.  Так что ерунда какая-то.

Компилятор не всесилен, иногда нужно принимать участие и помогать ему, правильным кодом ))

 
Sergey Dzyublik:
Дефект в работе отладчика ME(build 2370) - не работает StepInto (F11) и установленные breakpoints.
Проблема в том, что если для вызова функции хоть раз применить действие StepOver (F10) то в дальнейшем эту функцию уже ни как не будет возможности отладить.

Шаги по воспроизведению:
1) Запустить код в дебаг режиме;
2) После срабатывания точки останова выполнить дважды StepOver (F10);

Все - теперь ни как не "попасть" во внутрь функции Increment, все вручную установленные breakpoints не срабатывают, а вместо операции StepInto (F11) в действительности выполняется StepOver (F10).


Спасибо за сообщение.

Исправлено

 
Roman:

Компилятор не всесилен, иногда нужно принимать участие ))

В смысле?  Вы уверяли, что ваша конструкция быстрее работает, а она не работает быстрее.  Просто она в 100 раз реже вызывается в том коде.
 
Alexey Navoykov:

то здесь происходит лишь один вызов функции на 100 итераций.  А в первом макросе - вызов на каждой итерации.  Так что ерунда какая-то.

Тест, если не придираться к точности, а она тут и не нужна - плюс-минус нормальный.
Сравнивается: вызов 100 раз SymbolInfoTick  VS вызов 1 раз SymbolInfoTick с возвратом 99 раз "ручного" кеша.
Показывается как для текущего символа невыгодно использовать стандартную функцию SymbolInfoTick, когда на одном проходе функция будет вызывается более одного раза.
Как возможный вариант решения проблемы, разработчикам предлагается ввести предопределенную переменную:

const MqlTick _Tick; // Текущий _Symbol-тик.



Просто fxsaber так все разбросал по постам при этом ни чего не объяснив, что черт ногу сломит.

 
Alexey Navoykov:

то здесь происходит лишь один вызов функции на 100 итераций.  А в первом макросе - вызов на каждой итерации.  Так что ерунда какая-то.

его пример это конкретное использование данных о бид/аск в разных частях MQL-программы, чем чаще обращаешься к SymbolInfoTick() тем меньше производительность тестирования

я по профилировщику у себя нашел спорные участки по производительности TimeCurrent() , по разному пробовал, потом вообще отказался от нее,

редко использую глобальную видимость переменных, но чтобы в тестере все "летало", пишу так:

MqlTick Tick = {0};
#define Ask Tick.ask
#define Bid Tick.bid
#define TimeCurrent_ Tick.time
//+------------------------------------------------------------------+
void OnTick()
{
   SymbolInfoTick(_Symbol,Tick);
  ....
}
 
Alexey Navoykov:
В смысле?  Вы уверяли, что ваша конструкция быстрее работает, а она не работает быстрее.  Просто она в 100 раз реже вызывается в том коде.

Это не моя конструкция, и как я понял из того примера, то макросы вызывались поочерёдно для теста.
А отчет проходов показан вместе, хоть и обрезано но видно время выполнения.

 
Sergey Dzyublik:

Тест, если не придираться к точности, а она тут и не нужна - плюс-минус нормальный.
Сравнивается: вызов 100 раз SymbolInfoTick  VS вызов 1 раз SymbolInfoTick с возвратом 99 раз "ручного" кеша.

Да про кэш то я понял. Просто этот Роман тут чё-то втирал про аллокацию памяти...  Похоже вы были правы насчёт тролля )

 
Alexey Navoykov:

Да про кэш то я понял. Просто этот Роман тут чё-то втирал про аллокацию памяти...  Похоже вы были правы насчёт тролля )

А кэш по вашему где выделяется? Двоечники.

 
Sergey Dzyublik:

Тест, если не придираться к точности, а она тут и не нужна - плюс-минус нормальный.
Сравнивается: вызов 100 раз SymbolInfoTick  VS вызов 1 раз SymbolInfoTick с возвратом 99 раз "ручного" кеша.
Показывается как для текущего символа невыгодно использовать стандартную функцию SymbolInfoTick, когда на одном проходе функция будет вызывается более одного раза.
Как возможный вариант решения проблемы, разработчикам предлагается ввести предопределенную переменную:

Вы поняли меня на 100%.

Просто fxsaber так все разбросал по постам при этом ни чего не объяснив, что черт ногу сломит.

Каюсь, плохо формулирую.

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