voracità della memoria RAM di MT5, problemi con la lettura/scrittura di file di grandi dimensioni - pagina 5

 
Maxim Dmitrievsky:

quindi è un array bidimensionale, una matrice. Scrivilo.

Puoi mostrarmi un esempio di come scrivere e leggere gli array multidimensionali? È chiaro in teoria, ma l'implementazione non è chiara.

 
Aleksey Vyazmikin:

Puoi mostrarmi un esempio di come scrivere e leggere gli array multidimensionali? È chiaro in teoria, ma l'attuazione non è chiara.

Proprio come gli array unidimensionali, con WriteArray()

 
Aleksey Vyazmikin:

Sono a mio agio con la classe, la uso da 3 anni ormai, da MT4 - è comoda, ma dannazione, è lenta.

Naturalmente è facile leggere una stringa, ma trasformare il tutto in una struttura cellulare funzionante è molto più difficile.

Cosa vuol dire che non posso usare le classi? Lo faccio, e inoltre il dipendente di metaquote ha scritto la classe. E poi, ho effettivamente assunto una persona, ho pagato e mi aspettavo di avere un prodotto finito, ma mi è stato detto che va bene essere lenti... Ho creduto loro, ma ora ho anche l'eccesso di memoria - sono indignato.

La classe è progettata per piccoli file. Non importa affatto chi ha creato la classe. Ora abbiamo bisogno di un approccio diverso alla lettura di un file, in modo che la classe gestisca male quel file.

 
Roffild:

La classe è progettata per piccoli file. Non importa affatto chi ha creato la classe. Ora hai bisogno di un approccio diverso per leggere un file, quindi quella classe non gestisce bene quel file.

Lo perpetuerò. Fottuto, grazie.

 
Maxim Dmitrievsky:

proprio come quelli monodimensionali, attraverso WriteArray()

Ho trovato un esempio, dovrò provarlo, dovrò scrivere due file - per la comprensione generale e probabilmente per accelerare l'elaborazione.

Grazie.

Aggiunto: ho capito che si può scrivere solo 1 array alla volta, il che ovviamente non è molto conveniente.
 
Roffild:

La classe è progettata per piccoli file. Non importa affatto chi ha creato la classe. Ora avete bisogno di un approccio diverso per leggere un file, quindi quella classe non gestisce bene quel file.

Se la memoria non mi inganna, ho subito detto che abbiamo bisogno di lavorare con file di grandi dimensioni, e per esempio, è stato dato un grande file - decine di megabyte, se non un centinaio (abbiamo bisogno di guardare la corrispondenza, e nel formato attuale non è conveniente farlo).

 
Aleksey Vyazmikin:

Ho trovato un esempio, devo provarlo, dovrò scrivere due file - per la comprensione generale, e probabilmente per accelerare l'elaborazione.

Grazie.

Aggiunto: ho capito che si può scrivere solo 1 array alla volta, il che ovviamente non è molto conveniente.

Molto conveniente :)

 
Maxim Dmitrievsky:

molto utile :)

Non è conveniente perché si deve creare un file separato per i diversi tipi di dati.

 
Aleksey Vyazmikin:

Non è conveniente, perché bisogna creare un file separato per i diversi tipi di dati.

Bene, potete metterlo nella stessa directory in modo che non sia disperso. Non avrete alcun problema. È quello che faccio sempre per gli esperti. Creo immediatamente una directory chiamata nome del programma/numero di conto e ci ho messo tutti i file.

 

Raccomando di fare prima un cambiamento minimo, in modo che la riallocazione della memoria sia fatta meno frequentemente. Due linee

m_total_rows++;
ArrayResize(m_cells,m_total_rows*m_total_columns,10000);

in bool CSVReader::AddData(string data_str,bool header) sostituire con

m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize(m_cells,2*m_total_rows*m_total_columns);

Il numero di riallocazioni di memoria con la copia dovrebbe diventare O(log(n,2)) invece di O(n). 20 invece di 600 mila. Forse questo è abbastanza per te ora.