Non capisco perché il confronto era nel Visualiser e non nel Terminale?
Non ho esaminato il codice. Per tali compiti Kanvas è fatto uno per tutte le "50 linee".
Nel Terminale, ho misurato attraverso l'Usage-bibble. I metodi non mostrano alcuna differenza significativa.
Non capisco perché il confronto era nel Visualiser e non nel Terminale?
Perché nel Visualiser è la velocità lenta di Canvas che causa i problemi. E potete vedere quali sono. Un tale display consuma più del 50% del tempo della CPU, ne ho parlato sopra! E in Terminal dovreste chiamare i metodi in un ciclo per vedere tutto. Ma non mi sono preoccupato di questo. Ho un Expert Advisor in esecuzione nel ciclo con ottimizzazione offline, dove, infatti, ho bisogno di una tale visualizzazione con aggiornamenti veloci. Ma non sono pronto a presentarlo al momento perché il progetto non è ancora completo.
Non ho esaminato il codice. Per tali compiti Kanvas è fatto uno per tutte le "50 linee".
Allora date un'occhiata. È l'unico che c'è!
Vuoi davvero sbattermelo in faccia, vero?
Sapevo che avresti voluto fare qualcosa del genere. E sapevo che ti saresti inventato qualcosa del genere.
Non sai come preparare i test di confronto.
Perché nel Visualiser, è la lentezza di Canvas che causa i problemi. E si può vedere quali. Un tale display consuma più del 50% del tempo della CPU, ne ho parlato sopra! E in Terminal dovreste chiamare i metodi in un ciclo per vedere tutto. Ma non mi sono preoccupato di questo. Ho un Expert Advisor in esecuzione nel ciclo con ottimizzazione offline, dove, infatti, ho bisogno di una tale visualizzazione con aggiornamenti veloci. Ma non sono pronto a presentarlo al momento, perché il progetto non è ancora completo.
Allora dategli un'occhiata. È l'unico che c'è!
Beh... se stai scrivendo solo per un visualizzatore, allora fai questi giochi da solo. Non avete mai sentito parlare di una qualsiasi grafica, anche di segni di apertura/chiusura della posizione che rallentano il renderer? No.
Cercherò di non disturbarti... crea etichette separate per ogni lettera... e anche una risorsa separata...
Stai ingannando la gente.
Vuoi sbattermelo in faccia, vero?
Sapevo che avresti voluto fare qualcosa del genere. Sapevo che avresti voluto fare qualcosa del genere.
Non sai come preparare i test di confronto.
Tutto quello che ho capito dal tuo post sono state le parole "delusione", "LOL", "non so come preparare i test". Davvero, non capisco cosa c'entrino con questo argomento... Il resto non lo capisco dalla parola "affatto"! Quando ho creato questo thread, volevo vedere unacritica costruttiva qui, non un mucchio di affermazioni incomprensibili! Quindi, si preoccupi di spiegare le sue parole. Altrimenti, non scrivere sciocchezze qui!
Beh... se scrivi solo per il visualizzatore, allora gioca solo a questi giochi. Non avete mai sentito che qualsiasi grafica, anche i segni di apertura/chiusura della posizione rallentano il visualizzatore? No.
Cercherò di non disturbarti... crea etichette separate per ogni lettera... e anche una risorsa separata...
Mi affretto a informarti, Alexei. Tu, naturalmente, tendi a fantasticare, come fa Nikolai... Ma non è proprio come te lo immagini. Semplicemente, sono necessarie soluzioni diverse per compiti diversi. Tu e Nikolai avrete dei commenti sostanziali?!
Tutto quello che ho capito dal tuo post sono state le parole "delusione", "LOL", "non so come preparare i test". Davvero, non capisco cosa c'entrino con questo argomento... Il resto non lo capisco dalla parola "affatto"! Quando ho creato questo thread, volevo vedere unacritica costruttiva qui, non un mucchio di affermazioni incomprensibili! Quindi, si preoccupi di spiegare le sue parole. Altrimenti, non scrivere sciocchezze qui!
Pazienza amico mio, pazienza.
Vai avanti. Solo capirebene il codice prima, perché il codice è una cosa complicata, e ho bisogno di affermazioni chiaramente motivate!
Non capisco. La prima immagine ha una tela e c'è del testo sopra.
Le immagini successive non hanno un testo simile sul grafico.
Voglio dire, che cosa veniva paragonato allora?
Vai avanti. Ma prima capitebene il codice, perché il codice è una cosa complicata, e ho bisogno di un'affermazione argomentativa chiara!
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Vorrei presentarvi un confronto della velocità di visualizzazione del testo nel grafico, creato con metodi diversi. La prima variante della visualizzazione l'ho fatta usando la classe CCanvas, la seconda l'ho creata sulle etichette (CChartObjectLabel). Tutte le classi sono state prese dalla libreria standard. Questa idea mi è venuta quando ho creato una visualizzazione su CCanvas e ha rallentato significativamente il mio Expert Advisor. Allo stesso tempo, alcuni programmatori hanno sostenuto che mi sbagliavo eCCanvas, e per essere più precisi, OBJ_BITMAP_LABEL è molto veloce, più veloce di tutti i metodi di visualizzazione delle informazioni nel grafico disponibili in MetaTrader.Così, ho deciso di verificarlo sperimentalmente. Quindi, il momento della verità.
Funzionamento del display con uscita inCCanvas
Carico della CPU in questo momento
Funzionamento del display con uscitaCChartObjectLabel
Funzionamento diCChartObjectLabel con CChartObjectLabel con modalità di ottimizzazione della velocità abilitata (ve ne parlerò più avanti).
Ora per i valori temporali. Totale è il tempo totale di esecuzione del test Expert Advisor. Min delay,Mid delay eMax delay sonoperiodi di ritardo in tick. Ma non sempre possono essere ottenuti correttamente, nonostante il fatto che ho controllato il codice, non c'erano errori. Penso che abbia a che fare con la funzione GetTickCount64 nel tester. Ma è un problema insignificante. La cosa principale è che mostra il tempo totale.
Ora lasciatemi parlare brevemente dell'ottimizzazione della visualizzazione sulle etichette. Il fatto è che per far apparire il testo sullo schermo è necessario visualizzare le linee di una speciale matrice di linee in etichette, che sono disposte dall'alto in basso nel numero di 50 pezzi. Ma quando si aggiorna solo l'ultima riga, non è necessario aggiornare tutte le etichette, è sufficiente aggiornare solo un'etichetta che corrisponde a questa riga. Attivando la modalità optimizeUpdate si ottiene un guadagno di prestazioni superiore a 2x.
Ho deciso di testare il display sulle etichette in modo più dettagliato, dato che questo periodo di prova è troppo piccolo per esso, a causa della sua velocità. Pertanto, ho aumentato il periodo di prova. E ho ottenuto i seguenti risultati.
SenzaoptimizeUpdate: false
ConoptimizeUpdate: true
Ho aggiunto tutti i risultati a Excel
Il primo istogramma mostra il confronto complessivo, il secondo mostra solo la variante con le etichette.
Conclusione: la visualizzazione creata su CChartObjectLabel può essere 83,7 volte più veloce di quella equivalente su CCanvas. Non per niente le operazioni di pixel sono considerate le più costose di tutti i programmi!
Allego una tabella con i risultati dei test. Ilcodice sorgente può essere scaricato da KB:https://www.mql5.com/ru/code/33898