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

 

Когда мне нужно заполнить часть большого массива одним значением Z я использую конструкцию:

ArrayInitialize(ar,Z);     // промежуточный массив размер массива ar = 1000 
ArrayCopy(arr,ar,5000);    // основной массив заполняется значением Z c 5000 по 5999 элемент


Многие скажут - зачем так сложно, можно ведь проще:

ArrayFill(arr,5000,1000,Z);

Но по непонятной причине первый вариант с использованием промежуточного массива выполняется заметнее быстрее чем второй

2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 338
2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 111
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 301
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 122
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 334
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 142
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 364
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 156

Пару лет назад я уже писал по этому вопросу в СД. На что получил ответ, что мол спасибо, проблему нашли и исправили, в следующем билде будет нормально.

Но проблема остается.

Причем тот же самый тест в MT4:

2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayInitialize + ArrayCopy = 113
2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayFill = 78
Файлы:
 
Nikolai Semko:

Когда мне нужно заполнить часть большого массива одним значением Z я использую конструкцию:


Многие скажут - зачем так сложно, можно ведь проще:

Но по непонятной причине первый вариант с использованием промежуточного массива выполняется заметнее быстрее чем второй

Пару лет назад я уже писал по этому вопросу в СД. На что получил ответ, что мол спасибо, проблему нашли и исправили, в следующем билде будет нормально.

Но проблема остается.

Причем тот же самый тест в MT4:

Может здесь стоит отметиться с этим?

 
Artyom Trishkin:

Может здесь стоит отметиться с этим?

Ничего себе особенность и тонкость!
Важная стандартная функция работы с массивами самого быстрого в мире языка алготрейдинга работает в 4 раза медленнее, чем на устаревшем языке MQL4.
Только здесь.

Явный же бажище. 
Представляете, как многие программы залетают, когда его исправят.
 
Nikolai Semko:

Ничего себе особенность и тонкость!
Важная стандартная функция работы с массивами самого быстрого в мире языка алготрейдинга работает в 4 раза медленнее, чем на устаревшем языке MQL4.
Только здесь.

Явный же бажище. 
Представляете, как многие программы залетают, когда его исправят.

Добро.

Но вот как особенность в данный момент - разве плохо?
 
Artyom Trishkin:

Добро.

Но вот как особенность в данный момент - разве плохо?
Да, я наверное неправильно заявил о проблеме. Получилось, словно я говорю о ее решении.
Конечно же нет. Я пытался именно сформулировать проблему. Вариант с промежуточным массивом это вообще не решение проблемы, т.к. это выполняется дольше, чем должно быть исходя из логики работы с памятью, и также ведет к дополнительному расходу памяти.
 
Artyom Trishkin:

Добро.

Но вот как особенность в данный момент - разве плохо?

Анекдот.

Приходит старик к врачу. Говорит:

- Доктор, у меня спина болит.

- Ну-ка, нагнитесь. Болит?

- Болит.

- Сильнее нагнитесь!

- Во, так, вроде, полегче...

- Вот! Так и ходите!

)))))

 
Nikolai Semko:

Когда мне нужно заполнить часть большого массива одним значением Z я использую конструкцию:


Многие скажут - зачем так сложно, можно ведь проще:

Но по непонятной причине первый вариант с использованием промежуточного массива выполняется заметнее быстрее чем второй

Не могу понять! Зачем Вам нудно было заполнить часть большого массива одним значением Z? Или, какие данные Вы присваиваете массиву, с какой целью? Значения Close, AVG, RSI? Но разве они не присутствуют в памяти MetaTrader, после загрузки индикатора? Я тут как то играючи, отстучала в огромном массиве 0 1 и в итоге получила слово SOS. Присвоив 0 значение S, а 1 значение O. Можно было бы конечно для более, лучшего результата во втором размере массива отстучать Help. Затем проверить время заполнения каждого размера массива. Затем все сложить и разделить на 4.
 
Bob1Thec:
Не могу понять! Зачем Вам нудно было заполнить часть большого массива одним значением Z? Или, какие данные Вы присваиваете массиву, с какой целью?
Однотонный фон (включая прозрачность) картинки так делается.
 
fxsaber:
Однотонный фон (включая прозрачность) картинки так делается.

точнее градиентный фон

 
Nikolai Semko:

точнее градиентный фон

Не представляю, что здесь заполнение массива одним значением играет.

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