вопрос только в том, будет ли работать заметно быстрее, если обработку массивов вынести в DLL? у кого проинсталирован компилятор какой-нибудь? проверьте пожалуйста! не уж то настолько влом?
обращение к массиву работает раз в десять медленнее чем к локальным переменным.
Время обращения к элементу массива НЕ ВСЕГДА больше, чем время обращения к переменной. Конкретные цифры будут различны для разных компиляторов, но тенденция должна сохраниться.
Компилятор - Visual Studio 2005. Процессор - Athlon XP 2500+. Время исполнения, вместе с инициализацией массивов - 1,06-1,07 с.
Dim t1, t2 As Double
t1 = DateAndTime.Timer()
Dim x, y, z As Double
Dim d, k As Double
Dim Open(5001), Close(5001) As Double
For d = 5000 To 1 Step -1
For k = 1 To 4999
z = Close(k) : y = Close(k + 1) : x = Close(k + 2)
z = Open(k) : y = Open(k + 1) : x = Open(k + 2)
Next
Next
t2 = DateAndTime.Timer()
MsgBox(CStr(t2 - t1) + " seconds")
Тот же цикл, но с
z = Close(1) : y = Close(1) : x = Close(1)
z = Open(1) : y = Open(1) : x = Open(1)
дает 0,37-0,4 с.
И, наконец,
z = k : y = k : x = k
z = k : y = k : x = k
0,56-0,6 с.
На основании этого хочу сделать следующий вывод: главное - не компилятор и не "массив/не массив", главное - правильное структурирование данных и правильный код! P.S. Разумеется все приведенные тезисы, кроме замеров времени, - мое личное, глубоко субъективное и скромное мнение, просто как программиста.
да, всё-таки оптимизация результирующего кода в компиляторе - это сила.. не хочется залезать в дебри, но похоже, что копилятор visual studio сам оптимизирует обращения к массивам. для честности теста надо ввести переменную, скажем, S; и вставить между всеми присваиваниями x,y,z что-то типа S=S+x, S=S+y, S=S+z, а в конце вывести кроме времени ещё и S. чтоб получить "чистую" скорость.
хотя оптимизатор компилятора может и этот обман частично раскусить.. :)
Я уже давно отбросил такие мысли. И даже делал проверки. И пришел к выводу:
Компилятор выполняет все предписанные операции, да и просто не имеет права не выполнять их, т.к. просто невозможно на 100% знать, откуда я планирую получать доступ к этим переменным - в этом же методе, из какого-нибудь таймера (и структурно не связанного кода) или вообще из другого процесса. Так что, все по честному. Проверено.
у кого проинсталирован компилятор какой-нибудь? проверьте пожалуйста! не уж то настолько влом?
Время обращения к элементу массива НЕ ВСЕГДА больше, чем время обращения к переменной.
Конкретные цифры будут различны для разных компиляторов, но тенденция должна сохраниться.
Компилятор - Visual Studio 2005. Процессор - Athlon XP 2500+.
Время исполнения, вместе с инициализацией массивов - 1,06-1,07 с.
Тот же цикл, но с
дает 0,37-0,4 с.
И, наконец,
0,56-0,6 с.
На основании этого хочу сделать следующий вывод:
главное - не компилятор и не "массив/не массив", главное - правильное структурирование данных и правильный код!
P.S. Разумеется все приведенные тезисы, кроме замеров времени, - мое личное, глубоко субъективное и скромное мнение, просто как программиста.
да, всё-таки оптимизация результирующего кода в компиляторе - это сила..
не хочется залезать в дебри, но похоже, что копилятор visual studio сам оптимизирует обращения к массивам.
для честности теста надо ввести переменную, скажем, S; и вставить между всеми присваиваниями x,y,z что-то типа S=S+x, S=S+y, S=S+z, а в конце вывести кроме времени ещё и S. чтоб получить "чистую" скорость.
хотя оптимизатор компилятора может и этот обман частично раскусить.. :)
Я уже давно отбросил такие мысли. И даже делал проверки. И пришел к выводу:
Компилятор выполняет все предписанные операции, да и просто не имеет права не выполнять их, т.к. просто невозможно на 100% знать, откуда я планирую получать доступ к этим переменным - в этом же методе, из какого-нибудь таймера (и структурно не связанного кода) или вообще из другого процесса.
Так что, все по честному. Проверено.
P.S. Оффтопик, сорри. Не сдержался.
что в итоге из себя представляет массив, указанный параметром в ArrayCopySeries?
это обычный массив значений, или массив указателей на значения?
(вопрос, очевидно, глупый, но я лет 10 не программировал, тем более на C, тем более под Windows.)
и где про всё это почитать?
Очень нужно..
Может хоть.. Не знаю. Допускается ли рекурсивное обращение к start()?
способа нет. эксперт не запустится, если кнопка выключена.
допускается.
Спасибо за ответ.
Ну. И что теперь..?
Не знаю.. или пойти по 5, но вчера.. а сегодня по 3.. маленькие.
Придётся соглашаться на много маленьких. Не хотелось. Ну, да что ж теперь..:(
Казалось бы так просто..
(не обращайте внимания, это медитация уже через край на клавиатуру плещется)
Это у меня в глазах рябит или так и должно быть?
Это у меня в глазах рябит или так и должно быть?
Выделяются и выделялись всегда нормально. Только что проверил 183 билд и 187.