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

 
Roman:

...

И такая запись считается более правильной. 

Кем считается?  Вы бы хоть замеры скорости чтоль привели для начала.

 
Alexey Navoykov:

Кем считается?  Вы бы хоть замеры скорости чтоль привели для начала.

Слишком много внимания для троля.

 
TheXpert:
последуйте своему совету, возможно у вас появится хотя бы малейшее представление об аллоцировании.

Под аллоцированием имелось ввиду выделение памяти.
А не в том прямом смысле как класса. 
Пользовательская функция имеет свою область видимости.

 
Alexey Navoykov:

Кем считается?  Вы бы хоть замеры скорости чтоль привели для начала.

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

 
Sergey Dzyublik:

Может у вас проявляется данныей дефект:

(не исправлено ME5(build 2390)) **  (new)   Debuger, не работает StepInto (F11) и установленные breakpoints.

Возможно... Я пробовал заходить в метод int CCheckGroup::itemCheckState(const string item), который я описывал выше. И по началу, действительно отладчик заходит туда. Но стоит выйти из него и всё, больше отладчик его не видит и не работают никакие точки останова ни "Шаг с заходом". Что ж, придётся временно обходиться функциями Print() и Alert().

 
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 так все разбросал по постам при этом ни чего не объяснив, что черт ногу сломит.