Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5 - страница 14
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Могу ли я направить мозговой штурм на быструю реализацию перевода массива структур (длина кратна sizeof(int)) в массив int[] и обратно?
Практическое применение - быстрый обмен данными через ресурсы. Мой вариант слишком универсальный, поэтому тормозит.
В MT5 появились такие функции
в MT4 их нет и, возможно, не будет. Поэтому нужно решить задачу с этими функциями (если полезны) и без них.
Результат будет полезен большому количеству форумчан здесь.
Написал максимально простую заготовку для мозгового штурма, где уже присутствует мой вариант решения задачи
Результат
Результат
Что-то значительно быстрее второй вариант. Наверное, ускорить не получится.
быструю реализацию перевода массива структур (длина кратна sizeof(int)) в массив int[] и обратно?
Как-то вот так
Как-то вот так
Отлично справились! Буду вникать в код, спасибо.
ЗЫ Похоже, ArrayCopy - тот еще тормоз.
ЗЫЫ От запуска к запуску получаются сильно разные результаты. Например, если поменять очередность Тестов, то все почти переворачивается. Видимо, нужен более объективный замер скорости.
ЗЫ Похоже, ArrayCopy - тот еще тормоз.
Я помню замерял на какой-то локальной задаче, где нужно было копировать небольшое число элементов. До 16 элементов цикл из for работал заметно быстрее ArrayCopy, когда элементов становилось больше, то быстрее работал ArrayCopy. Ну и разумеется быстрее всего работает вариант без циклов вообще (о типу моих функций на прошлой странице)
быстрее всего работает вариант без циклов вообще (о типу моих функций на прошлой странице)
Не понял.
Не понял.
Это я к тому, for(int i=0; i<5; i++) dst[i]=src[i]; работает медленнее, чем dst[0]=src[0];dst[1]=src[1];dst[2]=src[2];dst[3]=src[3];dst[4]=src[4];
что достаточно очевидно в виду доп операций, связанных с управлением циклом)
А CopyArray как я сейчас проверил работает значительно быстрее обоих вариантов, вроде бы. Может ещё от ситуации зависит, конечно.
Да, вот это будет работать сильно быстрее (заменил for где можно на ArrayCopy, остальное то же самое):
Я же говорю, что написал первое, что пришло в голову без тестов))
А CopyArray как я сейчас проверил работает значительно быстрее обоих вариантов, вроде бы. Может ещё от ситуации зависит, конечно.
если ArrayCopy() сделан по принципу Сишного memmove(),
тогда,думаю, что скорость ArrayCopy() зависит от скорости распределения памяти, если память промежуточного буфера для копирования готова, то ArrayCopy() будет очень быстро выполнен, если память не распределена, то начнутся запросы в операционку для выделения памяти
можно попробовать потестить - сделать один вызов ArrayCopy() с большим обьемом данных, тем самым подготовив память буфера для обмена, и следом сделать цикл с ArrayCopy() с меньшими обьемами данным для копирования и с замером скорости