Errori, bug, domande - pagina 977

 
Renat:
Non viene chiamato nessun metodo GDI.

Voglio dire TextOut, non è un sistema?

Capisco l'etichetta, non la associo in nessun modo a GDI

 
voix_kas:

Il testo cambia in tutte (metà) le etichette destinate a visualizzare il valore dell'indicatore, non la sua descrizione. Lo si può vedere quando si esegue lo script.

O non ti capisco. Di quale linea stiamo parlando esattamente?

Scusa, stavo guardando il posto sbagliato dal mio cellulare e ho fatto un errore.

Eseguirò i miei test nelle prossime ore e posterò il codice sorgente e i risultati dettagliati.

 
sergeev:

Voglio dire TextOut, non è un sistema?

Capisco l'etichetta, non la associo in nessun modo a GDI

Pensavo che con GDI si trattasse di etichette.

La modifica dei parametri dell'etichetta non è altro che stipare massicciamente il flusso di comandi in una coda dedicata senza alcuna reale aggiunta di quei dati agli oggetti reali (gli oggetti appartengono al grafico, non a MQL5), finché i dati dell'oggetto non vengono resi o letti di nuovo. Cioè, la modifica reale degli oggetti è rimandata. Abbiamo volutamente applicato tale ottimizzazione per permettere agli sviluppatori di operare con decine di migliaia di oggetti senza rallentamenti.

Cioè, quando si modificano gli oggetti l'esecuzione effettiva è ritardata, il che dà una sensazione di velocità. Bene e tutto l'onere del disegno è portato sul filo dell'interfaccia (grafica) dell'applicazione. E durante il rendering, i metodi di ottimizzazione e di taglio dei limiti di visibilità funzionano, il che permette di lavorare normalmente con 300 000-500 000 oggetti per grafico.

Ma quando si lavora con i bitmap, l'intero lavoro viene fatto in MQL5 in una volta sola, senza alcun ritardo, ma dopo viene fatto istantaneamente quando si effettua il rendering. E il tempo totale di "modifica + rendering" di una bitmap è probabilmente più veloce per un dato numero di oggetti. Soprattutto perché la bitmap viene salvata tra una chiamata e l'altra e si può disegnare solo quello che serve invece di ricostruire l'intera tela.

Farò dei test dettagliati e posterò i risultati mostrando come si comportano gli oggetti e le bitmap in diverse modalità.

 

Postato i risultati in un thread separato: Test delle prestazioni di singole etichette di testo e bitmap su un grafico

L'autore aveva un serio bug nel suo script di gestione delle bitmap - in realtà usava due bitmap invece di una e le copiava costantemente l'una nell'altra, il che riduceva le prestazioni.

 
Renat:

Postato i risultati del test in un thread separato: Test delle prestazioni di singole etichette di testo e bitmap su un grafico

L'autore aveva un grave difetto nel suo script quando lavorava con le bitmap - in realtà usava due bitmap invece di una e le copiava costantemente l'una nell'altra, il che riduceva le prestazioni.

Quindi il modo per accelerare la produzione effettiva è un difetto? :)

Ho già descritto in precedenza lo scopo per cui sono state introdotte la tela dei modelli e la tela di lavoro.

 

Viviamo a lungo.

Il manuale MQL5 dice tipo datetime https://www.mql5.com/ru/docs/basis/types/integer/datetime:

"Gamma di valori dal 1° gennaio 1970 al 31 dicembre 3000. "

in realtà il valore massimo a 32535244799 è 3001.01.01 07:59:59

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
Il test è basato sulle prestazioni, quindi non dovrebbe essere intasato da ulteriori operazioni.
 

Per migliorare la purezza della programmazione, vorrei chiedere al pubblico un parere in merito.

Supponiamo che ci sia un flag (bool Flag) dichiarato globalmente. Quando si verificano certi eventi/condizioni, deve essere impostato su un certo valore.

La prima variante:

if (некое условие) {
  Flag = false;
}

Seconda opzione:

if (некое условие) {
  if (Flag) Flag = false;
}

Quale opzione:

1. più veloce in termini di prestazioni?

2. Se posso dire così, "più professionale"?

Si presume che questa sezione di codice venga controllata abbastanza spesso, per esempio ogni tick.

 
voix_kas:

Per migliorare la purezza della programmazione, vorrei chiedere al pubblico un parere in merito.

Supponiamo che ci sia un flag (bool Flag) dichiarato globalmente. Quando si verificano alcuni eventi/condizioni, deve essere impostato su un certo valore.

Naturalmente, la prima variante è più veloce. Meno istruzioni e un confronto/raccordo in meno.
 
Renat:
Naturalmente, la prima opzione è più veloce. Meno istruzioni e anche un confronto/raffronto in meno.
Grazie.
Motivazione: