Lona vs Rótulos

 

Gostaria de lhes apresentar uma comparação da velocidade de exibição de texto no gráfico, criado por diferentes métodos. A primeira variante do display que fiz usando a classe CCanvas, a segunda que criei nas etiquetas (CChartObjectLabel). Todas as aulas foram tiradas da biblioteca padrão. Esta idéia me veio quando criei uma exposição no CCanvas e atrasou significativamente meu Expert Advisor. Ao mesmo tempo, alguns programadores afirmaram que eu estava errado e oCCanvas, e para ser mais preciso, OBJ_BITMAP_LABEL é muito rápido, mais rápido do que todos os métodos de exibição de informações no gráfico disponível no MetaTrader.Por isso, decidi verificar experimentalmente. Portanto, o momento da verdade.

Operação do display com saída emCCanvas

CCanvas

Carga de CPU neste momento

CPU

Operação de display com saídaCChartObjectLabel

Etiquetas

Operação doCChartObjectLabel com o CChartObjectLabel com o modo de otimização de velocidade habilitado (falarei sobre isso abaixo).

Etiquetas otimizadas

Agora, para os valores de tempo. O total é o tempo total de funcionamento do Expert Advisor de teste. Atraso mínimo,Atraso médio e Atrasomáximo sãoperíodos de atraso em carrapatos. Mas nem sempre podem ser obtidos corretamente, apesar do fato de eu ter verificado o código, não houve erros. Acho que tem a ver com a função GetTickCount64 no testador. Mas é um problema insignificante. O principal é que ele mostra o tempo total.

Agora deixe-me falar brevemente sobre a otimização da exibição nas etiquetas. O problema é que, para que o texto apareça na tela, é necessário exibir linhas de um conjunto especial de linhas em etiquetas, que estão dispostas de cima para baixo no número de 50 peças. Mas quando apenas a última linha é atualizada, não é necessário atualizar todas as etiquetas, basta atualizar apenas uma etiqueta que corresponda a esta linha. Ative o modo otimizarUpdate e obtemos mais do que um ganho de desempenho de 2x.

Decidi testar a exibição nas etiquetas com mais detalhes, pois este período de teste é muito pequeno para ele, devido à sua velocidade. Portanto, eu aumentei o período de teste. E obteve os seguintes resultados.

SemotimizarUpdate: falso

optimizeUpdate: falso

ComoptimizeUpdate: true

optimizeUpdate: verdadeiro

Acrescentei todos os resultados ao Excel

comparizon-of-results

O primeiro histograma mostra a comparação geral, o segundo mostra apenas a variante com etiquetas.

Conclusão: o display criado no CChartObjectLabel pode ser 83,7 vezes mais rápido do que o equivalente no CCanvas. Não é por nada que as operações de pixel são consideradas como as mais caras em todos os programas!

Estou anexando uma tabela com os resultados dos testes. Ocódigo fonte pode ser baixado de KB:https://www.mql5.com/ru/code/33898


Arquivos anexados:
 

Eu não entendo porque a comparação estava no Visualizador e não no Terminal?

Eu ainda não investiguei o código. Para tais tarefas, Kanvas é feita uma para todas as "50 linhas".


No Terminal, eu media através da Bíblias de uso. Os métodos não mostram diferença significativa.

 
fxsaber:

Eu não entendo porque a comparação estava no Visualizador e não no Terminal?

Porque no Visualizador é a velocidade lenta da Tela que está causando os problemas. E você pode ver o que eles são. Tal visor consome mais de 50% do tempo da CPU, mencionei-o acima! E no Terminal você teria que chamar os métodos em um loop para ver tudo. Mas eu não me preocupei com isso. Eu tenho um Expert Advisor rodando no loop com otimização offline, onde, de fato, preciso de tal exibição com atualizações rápidas. Mas não estou pronto para apresentá-lo no momento porque o projeto ainda não está completo.


fxsaber:

Eu ainda não investiguei o código. Para tais tarefas, Kanvas é feita uma para todas as "50 linhas".

Em seguida, dê uma olhada. É o único que existe!

 
Você está enganando as pessoas.
Você realmente quer esfregar meu nariz nisso, não é mesmo?
Eu sabia que você iria querer fazer algo assim. E eu sabia que você inventaria algo assim.

Você não sabe como preparar testes comparativos.

 
Mihail Matkovskij:

Porque no Visualizador, é a velocidade lenta da Tela que está causando os problemas. E você pode ver quais deles. Tal visor consome mais de 50% do tempo da CPU, eu mencionei acima! E no Terminal você teria que chamar métodos em loop para ver tudo. Mas eu não me preocupei com isso. Eu tenho um Expert Advisor rodando no loop com otimização offline, onde, de fato, preciso de tal exibição com atualizações rápidas. Mas não estou pronto para apresentá-lo no momento, pois o projeto ainda não está completo.


Em seguida, dê uma olhada. É o único que existe!

Bem... se você só está escrevendo para um visualizador, então jogue estes jogos sozinho. Você nunca ouviu dizer que qualquer gráfico, mesmo marcas de abertura/fechamento de posição retardam o renderizador? Não.

Vou tentar não incomodá-lo... criar rótulos separados para cada carta... e também um recurso separado...

 
Nikolai Semko:
Você está enganando as pessoas.
Você quer esfregar meu nariz nisso, não é mesmo?
Eu sabia que você iria querer fazer algo assim. Eu sabia que você iria querer fazer algo assim.

Você não sabe como preparar testes comparativos.

Tudo o que entendi de seu posto foram as palavras "ilusão", "LOL", "Não sei como preparar testes". Realmente, não entendo como eles se relacionam com este tópico... O resto, eu não entendo nada da palavra "de todo"! Quando criei esta linha, queria ver aquicríticas construtivas, não um monte de reivindicações incompreensíveis! Por isso, dê-se ao trabalho de explicar suas palavras. Caso contrário, não escreva bobagens aqui!

 
Alexey Viktorov:

Bem... se você só escreve para o visualizador, então jogue estes jogos sozinho. Você nunca ouviu dizer que qualquer gráfico, mesmo marcas de abertura/fechamento de posição, retardam o visualizador? Não.

Vou tentar não incomodá-lo... criar rótulos separados para cada carta... e também um recurso separado...

Eu me apresso para informá-lo, Alexei. Você, claro, tende a fantasiar, assim como Nikolai... Mas não é realmente do jeito que você imagina. Simplesmente, são necessárias soluções diferentes para tarefas diferentes. Você e Nikolai terão algum comentário substantivo?!

 
Mihail Matkovskij:

Tudo o que entendi de seu posto foram as palavras "ilusão", "LOL", "Não sei como preparar testes". Realmente, não entendo como eles se relacionam com este tópico... O resto, eu não entendo nada da palavra "de todo"! Quando criei esta linha, queria ver aquicríticas construtivas, não um monte de reivindicações incompreensíveis! Por isso, dê-se ao trabalho de explicar suas palavras. Caso contrário, não escreva bobagens aqui!

Paciência, meu amigo, paciência.
Eu não tenho tanto tempo quanto você. Estou no meu último semestre e tenho três projetos de grupo em paralelo. Portanto, estou aqui em modo de impulso.
Mas, OK, posso convencê-lo de que você está iludido, relaxe e não se esforce tanto, caso contrário, meus esforços serão em vão.
A menos, é claro, que sua mente seja capaz de subjugar suas emoções.
 
Nikolai Semko:
Paciência, meu amigo, paciência.
Eu não tenho tanto tempo quanto você. Estou no meu último semestre e tenho três projetos de grupo em paralelo. Por isso, estou aqui por impulso.
Mas, OK, eu posso convencê-lo de sua ilusão, apenas relaxe e não trabalhe tão duro. Caso contrário, meus esforços serão em vão.

Vá em frente. Só entenda o códigocorretamente primeiro, porque o código é uma coisa complicada, e eu preciso de reivindicações claramente fundamentadas!

 

Eu não entendo. A primeira imagem tem uma tela e há um texto sobre ela.

As imagens subseqüentes não têm texto semelhante no gráfico.

Quero dizer, o que estava sendo comparado então?

 
Mihail Matkovskij:

Vá em frente. Mas primeiro entenda o códigocorretamente, porque código é uma coisa complicada, e eu preciso de uma argumentação clara!

Não vou entender seu código "adequadamente". Porque eu já investiguei. Veredicto breve - ais da mente.
É melhor você entender meu código, que vou escrever nos próximos meses.