Algoritmi, metodi di soluzione, confronto delle loro prestazioni - pagina 6

 
Alexandr Andreev:

Cosa c'è di sbagliato in un normale array di ints? Perché il thongs....

Perché non sappiamo in anticipo quanti trade farà l'EA. Abbiamo bisogno di allocare la memoria per l'array in anticipo, ma non sappiamo quanto.

Quindi abbiamo dovuto trovare una soluzione che fosse veloce e breve e che non occupasse memoria inutile.

 
Реter Konow:

Non proprio.

...

Ancora una volta, non capite di cosa stiamo parlando. Il numero di trade è assegnato dal sistema di trading (MetaTrader o borsa). Per numero dell'affare non si intende il numero di serie dell'affare, ma precisamente il biglietto restituito dalla funzioneHistoryDealGetTicket. Quindi, tenetene conto e modificate il vostro esempio.
 
Alexandr Andreev:

Di nuovo, immaginate che invece della stringa usiate una classe per memorizzare un array dinamico di grafici - e pensate che questo sia veloce?

Non conosco il funzionamento interno delle funzioni di stringa, ma le misure di velocità delle funzioni mostrano che ci vogliono meno di 100 microsecondi per trovare e restituire un medjic da una stringa di migliaia di medjic.

Mi sembra molto veloce. È improbabile che sia più veloce.

 
Реter Konow:

Perché non sappiamo in anticipo quanti trade farà l'EA. Abbiamo bisogno di allocare la memoria per l'array in anticipo, ma non sappiamo quanto.

Ecco perché abbiamo dovuto trovare una soluzione che sia veloce e breve e che non occupi memoria inutile.

A proposito di veloce. Misurare la velocità di estrazione di tutti i 24000 mila medjics. Sarete spiacevolmente sorpresi.

 
Реter Konow:

Fatto:

Il tuo esempio non può più essere corretto :)

Cosa succede se non si ha abbastanza dimensione delle file?

Il tuo esempio può avere 32767 record (transazioni), quindi prova a confrontare l'ultimo magik scritto e letto.


 
Vasiliy Sokolov:
Ancora una volta, non capite di cosa stiamo parlando. Il sistema di trading (MetaTrader o borsa) assegna un numero di trade. Per numero dell'affare non si intende il numero di serie dell'affare, ma precisamente il biglietto, restituito dalla funzioneHistoryDealGetTicket. Quindi, tenendo conto di questo e modificando il tuo esempio.

Non è un problema. Domani farò una seconda versione che funzionerà con il biglietto.

Questa versione è anche conveniente per il commercio.

 
Vasiliy Sokolov:

Nel conteggio veloce. Misurare la velocità di recupero di tutti i 24.000.000 di medjit. Sareste spiacevolmente sorpresi.

Beh, in ogni momento, abbiamo bisogno di un solo medjic, giusto?

Estrarre un medjack, accedere a qualsiasi informazione relativa all'ordine.

Perché dobbiamo estrarre 24.000 medjiks in una volta sola?

 

Che diavolo ci faccio qui? Con chi sto perdendo il mio tempo? È meglio che vada a bere qualcosa di più forte.

p.s. Oh, sì, hai un altro errore. Se MathRand alla terza chiamata restituisce per esempio il numero 1000 e scrive _3_1000_, che tipo di medjic si troverà per un affare con numero ordinale 1000?
 
Yury Kulikov:

Il tuo esempio non può essere corretto ora :)

Cosa succede se non si hanno abbastanza file?

Il tuo esempio può avere 32767 record (transazioni), quindi prova a confrontare l'ultimo magik scritto e letto.


Grazie per aver sottolineato il limite di lunghezza della linea.

Puoi iniziare a scrivere la seconda riga. Poi il terzo e così via... :)

 
Реter Konow:

Non conosco l'implementazione interna delle funzioni di stringa, ma una misurazione del tempo di esecuzione della funzione mostra che impiega meno di 100 microsecondi per trovare e restituire un medjic da una stringa totale di migliaia di medjic.

Penso che sia molto veloce. Non credo che possa essere più veloce.


bene, in poche parole una stringa di un carattere è unchar con un codice da 0 a 255 e pesa 1 byte... e ha allocato appena abbastanza memoria per 256 valori, 257 non ci starà, tornerà al primo.

In qualsiasi pagina, ogni carattere è un numero da 0 a 255... quindi prendiamo il numero 10000000 - pesa 4 byte, lo convertiamo nella stringa "10000000" poi per ogni carattere allociamo la memoria come per un grafico individuale da 0 a 255... 8 byte in totale. Non c'è risparmio di memoria da nessuna parte.

Motivazione: