Спасибо, проверим.
Переписали, реализовав ускорение.
0 в ArrayCopy означает WHOLE_ARRAY, так что ошибки нет - копируется все.
Renat:
Проверил, действительно, по факту WHOLE_ARRAY нулевой. Тогда явная ошибка в документации. Однако, гораздо удобнее было бы в реализациях многих алгоритмов с копированием, чтобы ноль обозначал отсутствие копирования.
0 в ArrayCopy означает WHOLE_ARRAY, так что ошибки нет - копируется все.
Из той же серии возможности ускорения:
#property strict int Benchmark( const bool Flag ) { double Array[]; ArrayResize(Array, 1000000); const int PrevTime = GetMicrosecondCount(); if (Flag) ArrayFree(Array); // Ускоряет нижеследующий resize (ArrayResize > ArraySize) на ~ 5% ArrayResize(Array, ArraySize(Array) + 1); // ArrayResize > ArraySize return(GetMicrosecondCount() - PrevTime); } /* int ArrayResize( void& array[], // массив, переданный по ссылке int new_size, // новый размер массива int Amount_Copy = WHOLE_ARRAY, // Количество копируемых элементов (от начала) при ресайзе int reserve_size=0 // резервное значение размера (избыточное) ); */ void OnStart( void ) { int time1 = 0; int time2 = 0; for (int i = 0; i < 100; i++) { time1 += Benchmark(TRUE); time2 += Benchmark(FALSE); } Print(("time1(") + (string)time1 + " ms.) / time2(" + (string)time2 + " ms.) = " + DoubleToString(100.0 * time1 / time2, 2) + "%"); return; }
Не хватает оператора присваивания для динамических массивов...
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ArrayCopy реализована не оптимально, отсюда появляются возможности иногда существенно ускорить ее работу.
Демонстрация:
Результат выполнения:
На 20% ArrayCopy выполняется быстрее, если перед ним вызвать соответствующий ArrayFree. Объяснение этому довольно простое: когда ArrayResize > ArraySize, то происходит не просто выделение куска памяти, но и копирование элементов из предыдущего куска в новый. Чтобы избежать явно лишнего иногда переноса данных, целесообразно схлопывать массив-приемник перед копированием в него.
Обратите внимание на ошибку в ArrayCopy - подсвеченный комментарий в коде.