Renat: Нельзя выбрать что обновлять - работа идет на одном полотне, объекты многократно перекрываются и их может быть пара сотен тысяч. Не говоря уже о частичной прозрачности некоторых объектов.
Поэтому обновления требует все окно.
Значит, рано или поздно придется переписывать ChartRedraw(), чтобы сделать его быстрее. Особенно большим выигрыш должен стать именно на простынях с альфа-каналом и сотнями тысяч объектов примитивов.
P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".
Значит, рано или поздно придется переписывать ChartRedraw(), чтобы сделать его быстрее. Особенно большим выигрыш должен стать именно на простынях с альфа-каналом и сотнями тысяч объектов примитивов.
P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".
Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.
Я лишь сделал ремарку по экстремально слабым ноутбукам, время которых уже прошло.
Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.
Я лишь сделал ремарку по экстремально слабым ноутбукам, время которых уже прошло.
Подтверждаю. Сами кадры перевыплёвываются очень быстро - примерно как написал Ренат.
Проблема возникла только у меня, в моём "индивидуальном частном случае" - захотелось сделать "внутренний" альфа-канал, работающий при наложении слоёв примитивов внутри самого буфера (до наложения на чарт).
Работающий прототип уже сделал. Собсно скорость меня устраивает, даже учитывая замедление в разы.
// Мультки на mql5 писать пока не собираюсь, а для более медленных нужд скорости достаточно. :)
// Если захочу вывести что-то динамичное быстрее - просто отключу альфа канал.
Проблема возникла только у меня, в моём "индивидуальном частном случае" - захотелось сделать "внутренний" альфа-канал, работающий при наложении слоёв примитивов внутри самого буфера (до наложения на чарт).
Внутренний альфаканал в буфере не нужен - это больше смахивает или на мазохизм или на ошибку проектирования.
Нужен именно конечный альфаканал, который накладывает битмап на чарт. Эта операция у нас работает быстро и с применением видеоускорителей.
Renat: Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.
Да и без хорошей видяхи около 100 кадров/сек выходит, на голом Pentium G840 и с Update():
Интересно другое: как получается так, что два ядра загружены чуть менее, чем полностью? Никаких других активных процессов при запуске этого скрипта не было.
При одном потоке никак значительно больше 50% не должно получаться...
Расследуем дальше: отрубаем одно ядро в Task Manager. Получаем следующее:
Интересно другое: как получается так, что два ядра загружены чуть менее, чем полностью? Никаких других активных процессов при запуске этого скрипта не было.
При одном потоке никак значительно больше 50% не должно получаться...
С каких пор терминал стал однопоточным?
Откройте в таск менеджере колонку "Счетчик потоков", а учтите, что каждый эксперт/скрипт живет в отдельном потоке.
Интерфейсный поток занят независимой отрисовкой чарта, а параллельно ему независимо работает поток скрипта, который рисует в своем битмапе.
Причем даже отрисовка битмапа во внутреннем буфере и пересоздание объекта никак не тормозит отрисовку чарта. Мы реализовали очень эффективную модель менеджера ресурсов и динамическую привязку битмапов к объектам так, что у них практически нет взаимных блокировок. Если бы у этих потоков была сильная блокируемая взаимосвязь, то нагрузка на процессор была бы меньше - один из связанных потоков был бы вынужден ждать другого. В результате скорость вывода данных бы серьезно пострадала.
Кстати, в терминале появилась замечательная возможность обмениваться массивными данными между MQL5 программами через динамические ресурсы, а не только через глобальные переменные или события. Так как пространство имен динамических ресурсов общее, то любая программа может запросить по точному имени чужой ресурс.
Поэтому обновления требует все окно.
Значит, рано или поздно придется переписывать ChartRedraw(), чтобы сделать его быстрее. Особенно большим выигрыш должен стать именно на простынях с альфа-каналом и сотнями тысяч объектов примитивов.
P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".
P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".
Значит, рано или поздно придется переписывать ChartRedraw(), чтобы сделать его быстрее. Особенно большим выигрыш должен стать именно на простынях с альфа-каналом и сотнями тысяч объектов примитивов.
P.S. Удивительно: "пятерочная" тема популярнее на "четвере", чем на "пятере".
Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.
Я лишь сделал ремарку по экстремально слабым ноутбукам, время которых уже прошло.
Вообще-то проблем со скоростью нет. Как и нет шансов ускорить отрисовку - там все оптимизировано давно. Легко делаются отображение 100 кадров в секунду на чарте при хорошей видеокарте.
Я лишь сделал ремарку по экстремально слабым ноутбукам, время которых уже прошло.
Подтверждаю. Сами кадры перевыплёвываются очень быстро - примерно как написал Ренат.
Проблема возникла только у меня, в моём "индивидуальном частном случае" - захотелось сделать "внутренний" альфа-канал, работающий при наложении слоёв примитивов внутри самого буфера (до наложения на чарт).
Работающий прототип уже сделал. Собсно скорость меня устраивает, даже учитывая замедление в разы.
// Мультки на mql5 писать пока не собираюсь, а для более медленных нужд скорости достаточно. :)
// Если захочу вывести что-то динамичное быстрее - просто отключу альфа канал.
Проблема возникла только у меня, в моём "индивидуальном частном случае" - захотелось сделать "внутренний" альфа-канал, работающий при наложении слоёв примитивов внутри самого буфера (до наложения на чарт).
Внутренний альфаканал в буфере не нужен - это больше смахивает или на мазохизм или на ошибку проектирования.
Нужен именно конечный альфаканал, который накладывает битмап на чарт. Эта операция у нас работает быстро и с применением видеоускорителей.
Да и без хорошей видяхи около 100 кадров/сек выходит, на голом Pentium G840 и с Update():
2012.03.25 23:59:15 2Alpha_Canvas-Test (EURUSD,H1) update = true: 90.56494412142948 frames/second
Интересно другое: как получается так, что два ядра загружены чуть менее, чем полностью? Никаких других активных процессов при запуске этого скрипта не было.
При одном потоке никак значительно больше 50% не должно получаться...
Расследуем дальше: отрубаем одно ядро в Task Manager. Получаем следующее:
2012.03.26 00:32:26 2Alpha_Canvas-Test (EURUSD,H1) update = true: 36.67167846272324 frames/second
Фреймов в секунду становится меньше, и даже не в 2 раза, а в 2.5! Картинка:
Интересно другое: как получается так, что два ядра загружены чуть менее, чем полностью? Никаких других активных процессов при запуске этого скрипта не было.
При одном потоке никак значительно больше 50% не должно получаться...
С каких пор терминал стал однопоточным?
Откройте в таск менеджере колонку "Счетчик потоков", а учтите, что каждый эксперт/скрипт живет в отдельном потоке.
Интерфейсный поток занят независимой отрисовкой чарта, а параллельно ему независимо работает поток скрипта, который рисует в своем битмапе.
Причем даже отрисовка битмапа во внутреннем буфере и пересоздание объекта никак не тормозит отрисовку чарта. Мы реализовали очень эффективную модель менеджера ресурсов и динамическую привязку битмапов к объектам так, что у них практически нет взаимных блокировок. Если бы у этих потоков была сильная блокируемая взаимосвязь, то нагрузка на процессор была бы меньше - один из связанных потоков был бы вынужден ждать другого. В результате скорость вывода данных бы серьезно пострадала.
Кстати, в терминале появилась замечательная возможность обмениваться массивными данными между MQL5 программами через динамические ресурсы, а не только через глобальные переменные или события. Так как пространство имен динамических ресурсов общее, то любая программа может запросить по точному имени чужой ресурс.
Ну вообще-то это приятная неожиданность...
Откройте в таск менеджере колонку "Счетчик потоков", а учтите, что каждый эксперт/скрипт живет в отдельном потоке.
А в МТ4 с этим как?
А в МТ4 с этим как?
Немного похуже, но все равно примерно так же.
Хотя пока считается хоть один индюк, отклик от гуйни получить не получится.