Lona vs Rótulos - página 13

 
Nikolai Semko:

Ah, bem, então é normal.
Eu também tenho uma tela em meu gif, e é o painel que consome menos recursos, porque não tenho que redesenhá-la com tanta freqüência e pegar o momento em que um novo bar entra.

Ótimo! Tudo é voar!

E em baixa velocidade, ele se atualiza sem pular um ritmo.
 
Dmitry Fedoseev:
Encontrei os arquivos certos. Não está claro onde, onde e quando olhar para os números, mas mesmo sem isso pode-se ver que a tela é muito mais lenta, e não é apenas uma tela em vez de uma régua, mas uma tela em vez de um monte de etiquetas.

Execute CanvasVLabels.mq5 expert, selecione o tipo de exibiçãooutType, habilite limit_fps, set, nIterations, it is 10000 por padrão. Isto é suficiente, você não precisa mudá-lo. Então os resultados serão semelhantes aos apresentados aqui: https://www.mql5.com/ru/forum/364640/page11#comment_21301589.

Agora para os resultados. Min delay,Mid delay eMax delay são os atrasos mínimo, médio e máximo, respectivamente, para uma corrida. Total, é o tempo total para o número total de passagens denIterações.

Mais uma vez, aqui está uma tabela comresultados comparativos

Tela fps ilimitada Tela limitada fps Rótulos fps ilimitados Rótulos fps limitados
Atraso mínimo (μs) 1530 1 18 0
Atraso médio (μs) 7674 4086 48 7
Atraso máximo (μs) 11967 11093 785 286
Total (μs) 77727510 29452299 39648984 27439654


Exatamente as mesmas medidas podem ser tomadas no testador, uma vez que o especialista foi projetado para fazê-lo. Mas eu ainda não os fiz. Eu o farei quando tiver algum tempo livre. Pretendo experimentar uma exibição de muitos rótulos BitmabLabels no futuro.

 

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Lona vs Rótulos

fxsaber, 2021.03.13 19:26

Eu sou o único com este tipo de resultado?

fxsaber:

Leva de 15 a 20%. Aparentemente, minha placa de vídeo é muito lenta.

Acontece que ResourceReadImage é muito lento. Livrou-se dele - teve carga zero.

 

Mais uma vez publico a tabela de comparação, mas desta vez com histogramas.

Tela fps ilimitada Tela limitada fps Rótulos fps ilimitados Rótulos fps limitados
Atraso mínimo (μs) 1530 1 18 0
Atraso médio (μs) 7674 4086 48 7
Atraso máximo (μs) 11967 11093 785 286
Total (μs) 77727510 29452299 39648984 27439654


Comparação dos valores médios de atraso por passe

Atraso médio

Que, por alguma razão, não eram comparáveis ao tempo total de funcionamento (Total)

Comparação do tempo total de funcionamento

Total

As medições mostraram que a exibição baseada em Tela com FPS limitado (Canvas unlimited FPS) é um pouco mais lenta que a exibição baseada em Rótulos com FPS limitado(Labels unlimited FPS). Mas em geral, ambos são adequados para exibir informações de processos altamente carregados.

Como executar o Expert Advisor para tomar medidas

Parâmetros de entrada

  1. Selecione outType na lista suspensa Canvas ou Labels
  2. Estabelecer limite_fps ligado ou desligado.
  3. Confirme sua seleção
  4. Pressione o botão Start para iniciar as medições na tabela

Medidas iniciais

Da mesma forma, o Expert Advisor pode fazer medições no testador visual. Entretanto, o intervalo de datas deve ser definido nas configurações do testador de modo a ter pelo menos tantas barras no histórico quanto o valor dasiterações dos parâmetros de entrada.

Mais informações, assim como as fontes, podem ser encontradas na descrição da biblioteca de exibição de gráficos:https://www.mql5.com/ru/code/33898

Biblioteca especialmente modificada para medições:https://www.mql5.com/ru/code/download/33898/chartdisplay.mqh

Especialista universal em medição:https://www.mql5.com/ru/code/download/33898/canvasvslabels.mq5

Para mais detalhes ver KB: https://www.mql5.com/ru/code/33898


Gostaria de acrescentar medidas mais corretas, feitas com o novo Expert Advisor, logo no primeiro posto deste tópico. Como essas medidas, que estão lá no momento, não são corretas. Mas a primeira mensagem, infelizmente, não pode mais ser editada. Peço aos moderadores que acrescentem medidas mais corretas ao início, e que marquem as que estão lá agora como irrelevantes.

Дисплей с оптимизацией для вывода текста в чарт по типу консоли
Дисплей с оптимизацией для вывода текста в чарт по типу консоли
  • www.mql5.com
Данная библиотека позволяет создавать дисплеи для удобного вывода текстовой информации в чарт с наиболее оптимальной скоростью
 
fxsaber:

Acontece que ResourceReadImage é muito lento. Livrou-se dele - carga zero.

Sério?
Uma surpresa para mim.
Quanto mais lento do que copiar uma matriz uint comum do mesmo tamanho?
 
Mihail Matkovskij:

Especialista em execução CanvasVLabels.mq5...

Qual é o objetivo? Não quero me aprofundar no código neste momento. Como são calculados esses valores? Se você testar no testador, você deve medir o tempo total gasto na corrida e nada mais, mas não o desempenho de fragmentos de código individuais. No caso extremo, não contar o inite. E aqui, sem medir, você pode ver que o kanvas é mais lento. Não sei, talvez eu tenha algum tipo de anomalia...

 
Nikolai Semko:
Sério?
Uma surpresa para mim.
Quanto mais lento do que copiar uma matriz uint normal do mesmo tamanho?

Com a chamada foi de cerca de 15% de carga, sem - zero.

 
Dmitry Fedoseev:

Qual é o objetivo? Não quero me aprofundar no código neste momento. Como são calculados esses números? Se você testar assim no testador, você deve medir o tempo total gasto na corrida e nada mais, e não o desempenho de fragmentos de código separados. No caso extremo, não contar o inite. E eis que, sem medidas, você pode ver que o kanvas é mais lento. Não sei, talvez eu tenha algum tipo de anomalia...

Eu não quero me aprofundar no código. Eu também não quero acreditar em minha palavra. :) Não sei como lhe explicar isso. Dizendo-lhe do começo ao fim como eu escrevi todo o código. Seria um artigo inteiro. :)

E não há nada a entender sobre como um especialista faz medições.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void run() {
  MqlRates rates[];
  int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  ulong start, min, mid, max;
  ulong last, delay; 
  static ulong totalDelays = 0;
  static int nTick = 0;
  ulong first;
  if (!triggerBtn.State())
    return;
  start = GetMicrosecondCount();
  min = INT_MAX; mid = 0; max = 0;
  if (CopyRates(NULL, PERIOD_CURRENT, 0, nIterations, rates) != nIterations) {
    triggerBtn.State(false);
    triggerBtn.setText("Start");
    Print("Not enough quotes!");
    Comment("Not enough quotes!");
    return;
  }
  for (int i = nIterations - 1; i >= 0 && triggerBtn.State(); i--) {
    first = GetMicrosecondCount();
    
    display.push();
    display.setText(concatenate(i));
    display.update();
    
    last = GetMicrosecondCount();
    delay = last - first;
    if (delay < min)
      min = delay;
    if (delay > max)
      max = delay;
    nTick++;
    totalDelays += delay;
    mid = totalDelays / nTick;
    Comment("Min delay: " + (string)min + " μs\n"
            "Mid delay: " + (string)mid + " μs\n"
            "Max delay: " + (string)max + " μs\n"
            "Total: " + (string)(GetMicrosecondCount() - start) + " μs" + " \n"
            "Completed: " + (string)(int)(100.0 / nIterations * (nIterations - i)) + "%");
  }
  
  printf("Min delay: %d μs", min);
  printf("Mid delay: %d μs", mid);
  printf("Max delay: %d μs", max);
  printf("Total: %d μs", GetMicrosecondCount() - start);
  triggerBtn.State(false);
  triggerBtn.setText("Start");
  ChartRedraw();
}
O total é calculado no final do loop e min, mid e max no corpo do loop, após display.push, display.setText e display.update. Nada complicado, se você se sentar e dar uma boa olhada em tudo, você pode chegar pelo menos ao código fonte de Kanvas e Rótulos. A propósito, também não há nada de complicado aí. Exceto pelos métodos que desenham curvas de Bezier e similares em Kanvas.
 
Dmitry Fedoseev:

E aqui, sem medidas, você pode ver que o kanvas é mais lento. Não sei, talvez eu tenha algum tipo de anomalia...

Você precisa me dizer em que parâmetros de entrada Kanvas é lento. Se limite_fps: falso, então é óbvio... :)

 
fxsaber:

Acontece que ResourceReadImage é muito lento. Livrou-se dele e ficou sem carga.

Se você ler a partir de um recurso economizado em tempo de compilação, você tem que fazê-lo uma vez.

Os recursos são comprimidos em tempo de compilação.

Razão: