Domanda di ottimizzazione. Nel tester, su ogni segno di spunta ho bisogno di ottenere un segno di spunta per un ulteriore lavoro. Io lo faccio in questo modo.
È chiaro che questa variante sarà più lenta:
Ma SymbolInfoTick è anche più lento perché il suo parametro stringa non è passato per riferimento.
È possibile avere un regolare sovraccarico di SymbolInfo* dove la stringa è passata per riferimento?
È meglio avere
In Optimizer, queste funzioni sono chiamate decine di miliardi di volte.
Chiamare Symbol() espande SEMPRE l'accesso alla variabile globale _Symbol, così come Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()
La chiamata Symbol() si svolge SEMPRE per accedere alla variabile globale _Symbol, così come Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()
Siamo passati da tempo a "copy_on_write string" -> quando si copia una stringa in un'altra il contenuto non viene copiato immediatamente (come era prima), il numero di riferimenti al buffer delle stringhe viene aumentato Per esempio, il numero di riferimenti viene aumentato quando si passa una stringa per valore, come parametro e viene ridotto dopo la chiamata. Quando una stringa viene cambiata, viene controllato il conteggio dei riferimenti al buffer e se c'è più di un riferimento, la stringa da cambiare viene "scollegata" dal vecchio buffer e ne viene allocato uno nuovo.
Siamo passati da tempo a "copy_on_write string" -> quando si copia una stringa in un'altra il contenuto non viene copiato immediatamente (come era prima), il numero di riferimenti al buffer della stringa viene aumentato Per esempio, il numero di riferimenti viene aumentato quando si passa una stringa per valore, come parametro e diminuito dopo la chiamata. Quando una stringa viene cambiata, viene controllato il conteggio dei riferimenti al buffer e se c'è più di un riferimento, la stringa cambiata viene "scollegata" dal vecchio buffer e gliene viene assegnato uno nuovo.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Domanda di ottimizzazione. Nel tester, su ogni segno di spunta ho bisogno di ottenere un segno di spunta per un ulteriore lavoro. Io lo faccio in questo modo.
È chiaro che questa variante sarà più lenta:
Ma SymbolInfoTick è anche più lento perché il suo parametro stringa non è passato per riferimento.
È possibile avere un regolare sovraccarico di SymbolInfo* dove la stringa è passata per riferimento?
È meglio avere
In Optimizer, queste funzioni sono chiamate decine di miliardi di volte.
Chiamare Symbol() espande SEMPRE l'accesso alla variabile globale _Symbol, così come Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()
La chiamata Symbol() si svolge SEMPRE per accedere alla variabile globale _Symbol, così come Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()
E il passaggio di una stringa per riferimento?
E passare una stringa per riferimento?
Apparentemente la ragione è uno dei problemi irrisolvibili in MQL - passare un letterale come parametro per const ref.
È possibile avere sovraccarichi regolari di SymbolInfo*, dove la stringa è passata per riferimento?
Come potrebbero aiutare?
Restituisce ancora 1, non 2
E passare una stringa per riferimento?
La stringa viene passata per riferimento.
Siamo passati da tempo a "copy_on_write string" -> quando si copia una stringa in un'altra il contenuto non viene copiato immediatamente (come era prima), il numero di riferimenti al buffer delle stringhe viene aumentato
Per esempio, il numero di riferimenti viene aumentato quando si passa una stringa per valore, come parametro e viene ridotto dopo la chiamata.
Quando
una stringa viene cambiata, viene controllato il conteggio dei riferimenti al buffer e se c'è più di un riferimento, la stringa da cambiare viene "scollegata" dal vecchio buffer e ne viene allocato uno nuovo.
Come possono aiutare?
Restituisce ancora (chiamato) 1, non 2
La variabile _Symbol è costante
Allora anche il sovraccarico non aiuterà.
ci sarà un errore già al momento della compilazione
La stringa viene passata per riferimento.
Siamo passati da tempo a "copy_on_write string" -> quando si copia una stringa in un'altra il contenuto non viene copiato immediatamente (come era prima), il numero di riferimenti al buffer della stringa viene aumentato
Per esempio, il numero di riferimenti viene aumentato quando si passa una stringa per valore, come parametro e diminuito dopo la chiamata.
Quando
una stringa viene cambiata, viene controllato il conteggio dei riferimenti al buffer e se c'è più di un riferimento, la stringa cambiata viene "scollegata" dal vecchio buffer e gliene viene assegnato uno nuovo.
È tutto definito a livello di compilazione?
Errore del compilatore:
È tutto definito a livello di compilazione?
No. Non è ancora noto al momento della compilazione.