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

 
Vladislav Andruschenko:
oop

Je vois ça oop... pourquoi écrire des tableaux en chaînes quand on peut les écrire en binaire d'un seul coup

 
Maxim Dmitrievsky:

Je peux voir ça oop... pourquoi écrire les tableaux en chaînes de caractères quand on peut les écrire en binaire d'un seul coup ?

C'est écrit, l'homme les traite dans Excel.

 
Sergey Savinkin:

Il est dit que l'homme les traite dans Excel.

ça ne dit pas que

 
Maxim Dmitrievsky:

ça ne dit pas ça.

Le tout premier post. Si vous lisez attentivement, ce fichier n'a peut-être rien à voir avec MT5. Ou traitées d'une manière spécifique.

 
Sergey Savinkin:

Le tout premier post. Si vous lisez attentivement, ce fichier n'est peut-être pas lié à MT5. Ou traitées d'une manière spécifique.

Alors laissez-le déterminer d'où il vient.

On peut aussi le lire comme un tableau, je suppose.
 
Aleksey Vyazmikin:

Merci pour l'analyse du code.

J'ai du mal à comprendre la POO, donc y apporter des modifications est une torture pour moi. D'après ce que j'ai compris, il s'agit de la classe qui est responsable de la lecture, où le fichier entier est divisé en tableaux de chaînes de caractères, et seulement ensuite, si je veux, je convertis ces valeurs de chaînes de caractères en un autre type et je les mets dans des tableaux de type int dans mon script. Si je comprends bien, pour accélérer le processus, je devrais lire le fichier entier et déterminer le nombre de lignes et de colonnes et le nombre de symboles dans chaque cellule, puis sélectionner immédiatement la taille du tableau ? Alors comment faire ?

J'aimerais comprendre où l'on prend 400 mégaoctets d'un coup ? Est-ce que j'ai bien compris que la mémoire est allouée, mais qu'elle n'est pas effacée/donnée qui a été allouée auparavant ?

400 Mo, c'est 36 millions de cellules avec des rangées vides, 12 octets chacune, 12*36=432.

Pour qu'on vous dise comment mieux faire, parlez-nous du problème que vous résolvez. La fréquence et l'importance des modifications apportées au fichier, le fait que tous doivent lire le fichier à chaque fois, le fait que le nombre de cellules non vides est constant d'une ligne à l'autre, le fait que toutes les cellules ne contiennent que des nombres entiers. Peut-être faut-il consacrer 9 minutes une fois par semaine et ce n'est pas grand-chose - alors il n'y a pas besoin de changer quoi que ce soit.

En général, en termes de "où aller pour être plus rapide", la direction principale est de déclarer une structure avec 57 champs correspondant à des valeurs entières, et de l'utiliser à la fois pour l'écriture et la lecture (le fichier est binaire). Ensuite, 78 Mo seront lus en moins d'une seconde depuis le disque directement en mémoire, sans délimiteurs ni représentations de chaînes de caractères. Pour des raisons de débogage, enregistrez également la sortie au format .csv. La taille du fichier déterminera immédiatement le nombre d'éléments dans le tableau de ces structures.

 
Vladimir:

400 Mo, c'est 36 millions de cellules avec des rangées vides, chacune de 12 octets, 12*36=432.

Le calcul est clair.

Vladimir:

Pour qu'on vous dise comment mieux faire, parlez-nous du problème que vous résolvez. La fréquence et l'ampleur des modifications apportées au fichier, la nécessité de tout lire à chaque fois, le nombre de cellules non vides constant d'une ligne à l'autre, le fait que toutes les cellules ne contiennent que des nombres entiers. Il faudrait peut-être consacrer 9 minutes une fois par semaine et ce n'est pas grand-chose - alors il n'est pas nécessaire de changer quoi que ce soit.

La tâche est universelle, il s'agit de lire des fichiers au format CSV, car ce format est universel pour différents programmes, qui me fournissent actuellement des données. Si vous faites spécifiquement référence à ce script, alors oui, vous devez tout lire et tout calculer, car Excel se plante à cause des formules. Les cellules peuvent contenir des nombres non entiers (pas spécifiquement dans cet exemple). 9 minutes, ce n'est pas beaucoup si c'est une fois par semaine... Cependant, entre autres choses, j'ai besoin de travailler avec une telle quantité de données par le biais de l'optimiseur, en transmettant le fichier au côté et en effectuant son traitement à l'aide d'agents, puis en récupérant le résultat au format csv (ici, je peux, bien sûr, utiliser un autre format) et en effectuant à nouveau le traitement. C'est pourquoi j'ai décidé de discuter publiquement de ce problème, car je souhaite traiter de grands tableaux de données à l'aide de MT5.

Vladimir:

En général, en termes de "où aller pour être plus rapide" - la direction principale : déclarer une structure, dont 57 champs correspondent à des valeurs entières, et l'utiliser à la fois pour l'écriture et la lecture (le fichier est binaire). Ensuite, 78 Mo seront lus en moins d'une seconde depuis le disque directement en mémoire, sans délimiteurs ni représentations de chaînes de caractères. Pour des raisons de débogage, enregistrez également la sortie au format .csv. La taille du fichier déterminera immédiatement le nombre d'éléments dans le tableau de ces structures.

Je ne peux même pas imaginer, comment cela peut être fait ? Ou bien le fichier initial doit-il être généré dans des conditions particulières ? Alors peut-être pouvez-vous faire un convertisseur de CSV en format binaire ?

Pouvez-vous aussi vous pencher sur la deuxième classe, comment lui apprendre à écrire un nombre illimité de colonnes ?

 
Maxim Dmitrievsky:

WriteArray / Read sont rapides, taille maximale jusqu'à 300 mb, tout est très rapide, ne consomme pas de RAM

Pourquoi y a-t-il autant de code pour la lecture/écriture, tout se fait en 4 lignes.

Pouvez-vous nous montrer comment faire ?

 
Maxim Dmitrievsky:

alors laissez-le déterminer d'où il vient

peut aussi être lu comme un tableau, je suppose que

CSV est un format de fichier universel, qui est pris en charge par divers logiciels, dont celui associé au MO.

En outre, c'est un fichier pratique pour transférer des données entre différents programmes (scripts/conseillers) MT5, et il ne prend pas beaucoup d'espace.

 
Aleksey Vyazmikin:

Pouvez-vous nous montrer comment faire ?

essayez de lire votre fichier comme ceci

https://www.mql5.com/ru/docs/files/filereadarray

Je n'ai pas le temps d'ouvrir le terminal maintenant, peut-être demain)

Документация по MQL5: Файловые операции / FileReadArray
Документация по MQL5: Файловые операции / FileReadArray
  • www.mql5.com
//| Структура для хранения данных о ценах                            | //| Script program start function                                    |