![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
@Nikolai Semko
Nikolai, ora è arrivata inaspettatamente la risposta alla domanda"perché ci vuole così tanto tempo per disegnare una tela".
Le finestre sono costituite da due tele, di dimensioni quasi uguali. Quindi l'area di disegno deve essere moltiplicata per due. Ma questo è solo l'inizio.
Sullo spazio della finestra ci sono grandi elementi di scorrimento (V_BOX), che vengono anch'essi disegnati completamente riempiti con il colore originale. Cioè, se V_BOX occupa la parte principale della finestra, l'area di disegno dovrebbe essere moltiplicata per tre. Ma! ha una tela aggiuntiva. L'immagine viene fatta scorrere su tale tela. La base dell'elemento è solo una barra di scorrimento. In breve, l'area di disegno dovrebbe essere moltiplicata per quattro (soprattutto se la barra di scorrimento è lunga) e solo allora gli elementi vengono disegnati.
Sembrerebbe tutto... Possiamo mettere un punto,moltiplicando l'area della finestra per tre o quattro. Ma no!
Anche gli elementi stessi sono a più livelli. Ognuno ha una base. La base è sempre disegnata da zero, riempita con il colore originale. Poi vengono disegnate le cornici sulla base. Poi, le icone vengono disegnate sopra le parti già disegnate dell'elemento. Infine, i testi vengono disegnati sopra tutto.
Di conseguenza, l'utente vede solo il colore finale su ogni particolare pixel. Ma nel punto in cui si trova questo pixel i colori cambiano più volte, mentre l'intera finestra viene disegnata.
Ora moltiplicate questo risultato per 15 finestre.... Risulta chiaro che non c'è un bug particolare nel codice: ho misurato appositamente la velocità di esecuzione di parti del blocco di disegno e 50 ms per uno schermo intero funzionano anche per me. È solo che mi ritrovo con molte più schermate.
Ho un'idea su come modificare il codice e velocizzare il disegno di 2 o 3 volte. Ma lo farò dopo il lavoro principale.
Voglio ringraziarti per aver insistito nel controllare il codice. Avevi ragione. Questo è il caso in cui le critiche sono utili.
Inoltre, grazie ad @AndreyBarinov per il suggerimento sul testo. Forse riuscirò a trovare qualcosa.
@Nikolai Semko
...e 50ms a schermo intero funziona anche per me. ....
Il test è approssimativo. Ho misurato la velocità di apertura di una finestra con tre tele di dimensioni quasi uguali (finestra delle icone) e ho ottenuto ~70 ms. Sommando l'area di tutti i riquadri (senza elementi), si ottiene circa l'area dello schermo del portatile da 17". Questo non include l'area della base degli elementi e delle icone stesse, che sono state disegnate sopra la tela. Quindi sì, ~50ms per riempire di colore l'area di uno schermo pieno immaginario. Non l'ho ancora misurato esattamente. Perché, se l'"elefante" è proprio al centro della stanza? :)
Parlavo di 50 ms come interfaccia sovraccarica e non ottimizzata. 3-10 ms è normale
Sei come Stirlitz che non voleva andare al campo di patate.
È necessario uno studio approfondito dei cicli all'interno del blocco di disegno. Una profilazione superficiale non fornisce un quadro completo. Ma è già chiaro qual è il punto. Ho scritto qui #553
. Credo di non sbagliare.
(versione in bozza del blocco di disegno, che uso per i test)...
Ho un'idea su come modificare il codice e accelerare il rendering di 2 o 3 volte. Ma lo farò dopo il lavoro principale. ...
Ho analizzato la complessità del compito e il valore del risultato finale.
Sì, la cosa più importante è che prima esca un software completamente funzionante.