Voracité de la mémoire RAM de MT5, problèmes de lecture/écriture de gros fichiers - page 5

 
Maxim Dmitrievsky:

donc c'est un tableau à 2 dimensions, une matrice. Ecris-le.

Pouvez-vous me montrer un exemple de la façon d'écrire et de lire des tableaux multidimensionnels? C'est clair en théorie, mais la mise en œuvre ne l'est pas.

 
Aleksey Vyazmikin:

Pouvez-vous me montrer un exemple de la façon d'écrire et de lire des tableaux multidimensionnels? C'est clair en théorie, mais la mise en œuvre n'est pas claire.

Tout comme les tableaux unidimensionnels, avec WriteArray()

 
Aleksey Vyazmikin:

Je suis à l'aise avec la classe, je l'utilise depuis 3 ans maintenant, depuis MT4 - c'est pratique, mais bon sang, c'est lent.

Bien sûr, il est facile de lire une chaîne de caractères, mais transformer le tout en une structure cellulaire fonctionnelle est beaucoup plus difficile.

Comment ça, je ne peux pas utiliser les classes ? Oui, et en plus, l'employé de méta-citation a écrit la classe. Et puis, j'ai effectivement engagé une personne, j'ai payé et je m'attendais à obtenir un produit fini, mais on m'a dit que c'était normal d'être lent... Je les ai crus, mais maintenant, j'ai aussi la surcharge de mémoire - je suis indigné.

Le cours est conçu pour les petits dossiers. Il importe peu de savoir qui a créé la classe. Maintenant, nous avons besoin d'une approche différente pour lire un fichier, de sorte que cette classe gère mal ce fichier.

 
Roffild:

Le cours est conçu pour les petits dossiers. Il n'est pas du tout important de savoir qui a créé la classe. Maintenant, vous avez besoin d'une approche différente pour lire un fichier, donc cette classe ne gère pas bien ce fichier.

Je vais la perpétuer. C'est foutu, merci.

 
Maxim Dmitrievsky:

comme les unidimensionnels, par WriteArray()

J'ai trouvé un exemple, je vais devoir l'essayer, je vais devoir écrire deux fichiers - pour la compréhension générale et probablement pour accélérer le traitement.

Merci.

Ajouté : Je comprends que vous ne pouvez écrire qu'un seul tableau à la fois, ce qui bien sûr n'est pas très pratique.
 
Roffild:

Le cours est conçu pour les petits dossiers. Il n'est pas du tout important de savoir qui a créé la classe. Maintenant, vous avez besoin d'une approche différente pour lire un fichier, donc cette classe ne gère pas bien ce fichier.

Si ma mémoire est bonne, j'ai immédiatement dit que nous devions travailler avec de gros fichiers, et par exemple, un gros fichier a été donné - des dizaines de mégaoctets, si ce n'est une centaine (nous devons regarder la correspondance, et dans le format actuel ce n'est pas pratique à faire).

 
Aleksey Vyazmikin:

J'ai trouvé un exemple, je dois l'essayer, je vais devoir écrire deux fichiers - pour une compréhension générale, et probablement pour accélérer le traitement.

Merci.

Ajouté : Je comprends que vous ne pouvez écrire qu'un seul tableau à la fois, ce qui bien sûr n'est pas très pratique.

Très pratique :)

 
Maxim Dmitrievsky:

très pratique :)

Pas pratique car vous devez créer un fichier distinct pour les différents types de données.

 
Aleksey Vyazmikin:

Pas pratique, car vous devez créer un fichier distinct pour les différents types de données.

Vous pouvez le mettre dans le même répertoire pour qu'il ne soit pas dispersé. Vous n'aurez aucun problème. C'est ce que je fais toujours pour les experts. Je crée immédiatement un répertoire appelé nom du programme/numéro de compte et j'ai mis tous les fichiers dedans.

 

Je recommande d'effectuer d'abord un changement minimal, afin que la réallocation de la mémoire soit moins fréquente. Deux lignes

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

dans bool CSVReader::AddData(string data_str,bool header) remplacer par

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

Le nombre de réallocations de mémoire avec copie devrait devenir O(log(n,2)) au lieu de O(n). 20 au lieu de 600 mille. Peut-être que ça te suffit maintenant.

Raison: