Tela vs Etichette - pagina 13

 
Nikolai Semko:

Ah, bene, allora è del tutto normale.
Ho anche un canvas sulla mia gif, ed è il pannello che consuma meno risorse, perché non devo ridisegnarlo così spesso e catturare il momento in cui arriva una nuova barra.

Grande! Tutto sta volando!

E a bassa velocità, si aggiorna senza saltare un colpo.
 
Dmitry Fedoseev:
Ho trovato i file giusti. Non è chiaro dove, dove e quando guardare i numeri, ma anche senza questo si può vedere che la tela è molto più lenta, e non è solo una tela invece di una bava, ma una tela invece di un mucchio di etichette.

Esegui l'esperto CanvasVsLabels.mq5, seleziona il tipo di visualizzazioneoutType, abilita limit_fps, imposta, nIterazioni, è 10000 di default. Questo è sufficiente, non è necessario cambiarlo. Allora i risultati saranno simili a quelli presentati qui: https://www.mql5.com/ru/forum/364640/page11#comment_21301589.

Ora per i risultati. Min delay,Mid delay eMax delay sono i ritardi minimo, medio e massimo, rispettivamente, per una corsa. Totale, è il tempo totale per il numero totale di passagginIterazioni.

Ancora una volta, ecco una tabella con irisultati del confronto

Tela fps illimitati Tela limitata fps Etichette fps illimitati Etichette limitate fps
Ritardo minimo (μs) 1530 1 18 0
Ritardo medio (μs) 7674 4086 48 7
Ritardo massimo (μs) 11967 11093 785 286
Totale (μs) 77727510 29452299 39648984 27439654


Esattamente le stesse misure possono essere prese nel tester, dato che l'esaminatore è progettato per farlo. Ma non li ho ancora fatti. Lo farò quando avrò del tempo libero. Ho intenzione di sperimentare una visualizzazione di molti BitmabLabels in futuro.

 

Forum sul trading, sistemi di trading automatico e test di strategia

Tela vs Etichette

fxsaber, 2021.03.13 19:26

Sono l'unico con questo tipo di risultato?

fxsaber:

Toglie il 15-20%. A quanto pare, la mia scheda video è troppo lenta.

Risulta che ResourceReadImage è molto lento. Mi sono sbarazzato di esso - ho avuto zero carico.

 

Ancora una volta pubblico la tabella di confronto, ma questa volta con gli istogrammi.

Tela fps illimitati Tela limitata fps Etichette fps illimitati Etichette limitate fps
Ritardo minimo (μs) 1530 1 18 0
Ritardo medio (μs) 7674 4086 48 7
Ritardo massimo (μs) 11967 11093 785 286
Totale (μs) 77727510 29452299 39648984 27439654


Confronto dei valori di ritardo medio per passaggio

Ritardo medio

Che per qualche motivo non erano paragonabili al tempo totale di esecuzione (Totale)...

Confronto del tempo di esecuzione totale

Totale

Le misurazioni hanno mostrato che la visualizzazione basata su Canvas con FPS limitati (Canvas unlimited FPS) è leggermente più lenta nelle prestazioni rispetto alla visualizzazione basata su Labels con FPS limitati(Labels unlimited FPS). Ma in generale sono entrambi adatti per la visualizzazione di informazioni da processi altamente caricati.

Come eseguire l'Expert Advisor per prendere le misure

Parametri di ingresso

  1. Seleziona outType dall'elenco a discesa Canvas o Labels
  2. Imposta limit_fps on o off.
  3. Conferma la tua selezione
  4. Premere il pulsante Start per iniziare le misurazioni nel grafico

Misure iniziali

L'Expert Advisor può prendere le misure nel tester visivo esattamente allo stesso modo. Tuttavia, l'intervallo di date dovrebbe essere impostato nelle impostazioni del tester in modo da avere almeno tante barre nella storia quanto il valore del parametro di inputnIterations.

Maggiori informazioni, così come le fonti, possono essere trovate nella descrizione della libreria Chart Display:https://www.mql5.com/ru/code/33898

Biblioteca appositamente modificata per le misurazioni:https://www.mql5.com/ru/code/download/33898/chartdisplay.mqh

Esperto universale per la misurazione:https://www.mql5.com/ru/code/download/33898/canvasvslabels.mq5

Per maggiori dettagli vedere KB: https://www.mql5.com/ru/code/33898


Vorrei aggiungere altre misurazioni corrette, fatte con il nuovo Expert Advisor nel primo post di questo thread. Poiché quelle misure, che ci sono al momento, non sono corrette. Ma il primo messaggio, purtroppo, non può più essere modificato. Chiedo ai moderatori di aggiungere più misure corrette all'inizio, e di segnare quelle che ci sono ora come irrilevanti.

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

Si è scoperto che ResourceReadImage è molto lento. Me ne sono sbarazzato - carico zero.

Seriamente?
Sorpresa per me.
Quanto più lento della copia di un normale array uint della stessa dimensione?
 
Mihail Matkovskij:

In esecuzione esperto CanvasVsLabels.mq5...

Qual è il punto? Non voglio scavare nel codice in questo momento. Come vengono calcolati questi valori? Se testate nel tester, dovreste misurare il tempo totale impiegato nell'esecuzione e nient'altro, ma non le prestazioni dei singoli frammenti di codice. Nel caso estremo, non contare l'inite. E qui, senza misurare, si può vedere che kanvas è più lento. Non so, forse ho una specie di anomalia...

 
Nikolai Semko:
Davvero?
Sorpresa per me.
Quanto più lento della copia di un normale array uint della stessa dimensione?

Con la chiamata era circa il 15% di carico, senza - zero.

 
Dmitry Fedoseev:

Qual è il punto? Non voglio scavare nel codice in questo momento. Come vengono calcolate queste cifre? Se testate nel tester in questo modo, dovreste misurare il tempo totale speso nell'esecuzione e nient'altro, e non le prestazioni di frammenti di codice separati. Nel caso estremo, non contare l'inite. E qui, senza misurare, si può vedere che kanvas è più lento. Non so, forse ho una specie di anomalia...

Non voglio scavare nel codice. Nemmeno io voglio credere alla mia parola. :) Non so come spiegartelo. Raccontandovi dall'inizio alla fine come ho scritto tutto il codice... Sarebbe un articolo intero. :)

E non c'è proprio nulla da capire su come un esperto fa le misurazioni.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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();
}
Il totale è calcolato alla fine del ciclo e min, mid e max nel corpo del ciclo, dopo display.push, display.setText e display.update. Niente di complicato, se ti siedi e guardi bene tutto, puoi arrivare almeno al codice sorgente di Kanvas e Labels. A proposito, non c'è niente di complicato neanche lì. Tranne i metodi che disegnano curve di Bezier e simili in Kanvas.
 
Dmitry Fedoseev:

E qui, senza misure, si può vedere che il kanvas è più lento. Non so, forse ho una specie di anomalia...

Devi dirmi a quali parametri di input Kanvas è lento. Se limit_fps: false, allora è ovvio... :)

 
fxsaber:

Si è scoperto che ResourceReadImage è molto lento. Me ne sono sbarazzato e ho avuto zero carico.

Se leggete da una risorsa salvata in fase di compilazione, dovete farlo una volta sola.

Le risorse sono compresse al momento della compilazione.