Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу прощения народ, оптимизация была выключена в настройках проекта
Код:
Без оптимизации
С оптимизацией
С оптимизацией да, все наоборот, проверил много раз
Хватит уже флудить, матчасть сначала освойте, а потом уже доказывайте свою правоту. Вам результат был бы понятен без каких-либо тестов, если бы вы как минимум прочитали хоть одну книжку по работе процессора и памяти. Я вам предложил самую гениальную из них, если вы захотите немого продвинутся в программировании, то вы ее обязательно прочитаете.
Причем тут память и процессор, речь про оптимизацию, теоретик вы книжный)
не странно, нужно уметь тестировать простейшие операторы и операции в MQL - ну вот на кой я я добавил в свой тест srand(GetTickCount()) ?
;)
Кстати посмотрел внимательнее, у вас же там тоже результат в цикле никак не учитывается в дальнейшем, а значит компилятор его может легко вырезать.
Кстати посмотрел внимательнее, у вас же там результат в цикле никак не учитывается в дальнейшем, а значит компилятор его может легко вырезать.
убрал даже rand() - его компилятор прекрасно инлайнит, сделал такой тест:
2019.08.18 11:55:41.457 SpeedTest (EURUSD,H1) 1. s1=rand(): loops=100000000 ms=7672
2019.08.18 11:55:49.085 SpeedTest (EURUSD,H1) 2. s2=rand(): loops=100000000 ms=7625
2019.08.18 11:55:56.796 SpeedTest (EURUSD,H1) 3. s3=rand(): loops=100000000 ms=7719
2019.08.18 11:56:04.495 SpeedTest (EURUSD,H1) 4. s4=rand(): loops=100000000 ms=7703
2019.08.18 11:56:12.113 SpeedTest (EURUSD,H1) 5. s5=rand(): loops=100000000 ms=7610
2019.08.18 11:56:17.695 SpeedTest (EURUSD,H1) 1. q=rand(): loops=100000000 ms=5578
2019.08.18 11:56:23.362 SpeedTest (EURUSD,H1) 2. q=rand(): loops=100000000 ms=5672
2019.08.18 11:56:28.970 SpeedTest (EURUSD,H1) 3. q=rand(): loops=100000000 ms=5609
2019.08.18 11:56:34.637 SpeedTest (EURUSD,H1) 4. q=rand(): loops=100000000 ms=5672
2019.08.18 11:56:40.277 SpeedTest (EURUSD,H1) 5. q=rand(): loops=100000000 ms=5640
Так вот я и говорю, если хотите "не плошать", то вперёд на ассемблер. Раз вам нужно самому всё лично контролировать... Ведь описанный случай - это совершенный пустяк. Встречаются вещи на порядки сложнее. ООП вам точно противопоказано. Вы ж не узнаете, выродил ли компилятор тот или иной виртуальный метод в обычный вызов, или вырезал ли излишнюю проверку указателя... Что вообще можно делать на управляемом MQL с такой паранойей ? )
Да и подстраивать код под особенности компилятора (причём мнимые), в ущерб правильности и надёжности кода - это явно не то, чем должен заниматься хороший программист. А здесь речь идёт именно о неправильности кода. Переменная должна объявляться непосредственно в том блоке, в котором используется.
Ха-ха-ха... Алексей, ты утверждаешь (давай на "ты"), что "ООП точно противопоказан" одному из главному адептов ООП на форуме.
Код надо подстраивать не под особенности компилятора, а под особенности СВОЕГО мышления. В данном случае - объявление переменной внутри цикла в теории снижает эффективность. Потому, что согласно принятым соглашениям - переменная должна создаваться каждый раз, и каждый раз должна уничтожаться.
Тут даже дело не в эффективности. Надежный код - это код, который прозрачен, понятен, и легок для модификации и поддержки.
Лично мне крайне не нравится, когда ворох переменных разбросан по программе, и каждый раз надо искать, где создается та или иная переменная. Поэтому переменные я стараюсь по возможности объявлять вначале функции, все вместе - именно для того, чтобы видеть, где они созданы, и понимать, когда они будут удалены.
В данном случае пример просто очень короткий. Когда там между созданием переменной и ее использованием десятки строк и куча вложенных функций - по мне - гораздо надежнее, когда переменная объявляется снаружи блока, заранее.
Прошу прощения народ, оптимизация была выключена в настройках проекта
Код:
Без оптимизации
С оптимизацией
С оптимизацией да, все наоборот, проверил много раз
У вас вообще в этом примере с помощью оптимизации все тело цикла могло быть вырезано.
В общем всё сходится к тому, как и ожидалось, что незачем заниматься ерундой, выискивая себе несуществующие проблемы на ровном месте и создавая реальные.
Если чешутся руки и считаешь себя крутым кулхацкером, то пиши сразу на ассемблере. Иначе отойди в сторонку и не мешай дяде компилятору делать свою работу )
У вас вообще в этом примере с помощью оптимизации все тело цикла могло быть вырезано.
Результат выполнения с пустым телом цикла, сильно отличается, гораздо быстрее работает
В общем всё сходится к тому, как и ожидалось, что незачем заниматься ерундой, выискивая себе несуществующие проблемы на ровном месте и создавая реальные.
Если чешутся руки и считаешь себя крутым кулхацкером, то пиши сразу на ассемблере. Иначе отойди в сторонку и не мешай дяде компилятору делать свою работу )
Главная проблема как раз в том, что я не считаю себя кулхацкером. Именно поэтому переменные, на мой взгляд, следует объявлять снаружи цикла. И лучше - в самом начале функции, сразу все.
А как раз кулхацкеры - могут объявлять переменные по мере надобности, внутри кода.
Главная проблема как раз в том, что я не считаю себя кулхацкером. Именно поэтому переменные, на мой взгляд, следует объявлять снаружи цикла. И лучше - в самом начале функции, сразу все.
А как раз кулхацкеры - могут объявлять переменные по мере надобности, внутри кода.
Предпочитаю разбивать код на логические блоки и объявлять нужные для них переменные в них, а не городить кучу всяких переменных в начале функции, большая часть из которых нужна только в одном блоке, где то там далеко внизу