![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
@Nikolai Semko
Nikolai, agora inesperadamente veio a resposta para a pergunta"por que demora tanto para desenhar uma tela".
As janelas consistem em duas telas! Essas telas são quase iguais em tamanho. Portanto, a área de desenho deve ser multiplicada por dois. Mas isso é só o começo.
No espaço da janela, há grandes elementos de rolagem (V_BOX), que também são desenhados completamente preenchidos com a cor original. Ou seja, se a V_BOX ocupar a parte principal da janela, a área de desenho deverá ser multiplicada por três. Mas! ele tem uma tela adicional. A imagem é rolada nessa tela. A base do elemento é apenas uma barra de rolagem. Resumindo: a área de desenho deve ser multiplicada por quatro (especialmente se a barra de rolagem for longa). E só então os elementos são desenhados.
Parece que isso é tudo... Podemos colocar um ponto,multiplicar a área da janela por três ou quatro. Mas não!
Ospróprios elementos também têm várias camadas. Cada um tem uma base. A base é sempre desenhada do zero, preenchida com a cor original. Em seguida, as molduras são desenhadas sobre a base. Em seguida, os ícones são desenhados sobre as partes já desenhadas do elemento. E, por fim, os textos são desenhados em cima de tudo.
Como resultado, o usuário vê apenas a cor final em cada pixel específico. Mas, no local desse pixel, as cores mudaram várias vezes à medida que a janela inteira é desenhada.
Agora multiplique isso por 15 janelas.... Fica claro que não há nenhum bug especial no código - medi especialmente a velocidade de execução de partes do bloco de desenho, e 50 ms para uma tela inteira também funciona para mim. O problema é que acabo tendo muito mais telas.
Tenho uma ideia de como alterar o código e acelerar o desenho em 2 ou 3 vezes. Mas farei isso depois do trabalho principal.
Quero agradecê-lo por insistir em verificar o código. Você estava certo. Esse é o caso quando a crítica foi útil.
Além disso, agradeço a @AndreyBarinov pela dica com o texto. Talvez eu consiga pensar em algo.
@Nikolai Semko
...e 50ms em tela cheia também funciona para mim. ....
O teste é aproximado. Medi a velocidade de abertura de uma janela com três telas de tamanho quase igual (janela de ícones) e obtive cerca de 70 ms. Se você somar a área de todas as telas (sem elementos), terá aproximadamente a área da tela do laptop de 17". Isso não inclui a área da base dos elementos e os próprios ícones, que foram desenhados na parte superior da tela. Portanto, sim, cerca de 50 ms para preencher com cores a área de uma tela cheia fictícia. Ainda não medi isso exatamente. Por que, quando o "elefante" está bem no meio da sala? :)
Eu estava falando de 50 ms como uma interface sobrecarregada e não otimizada. 3-10 ms é normal
Você é como Stirlitz, que não queria ir para a plantação de batatas.
Você precisa de um estudo aprofundado dos ciclos dentro do bloco de desenho. O perfil superficial não oferece um quadro completo. Mas já está claro qual é o objetivo. Escrevi três postagens acima. Acho que não estou errado.
(versão preliminar do bloco de desenho, eu o uso para testes)