Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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++ ;
si (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.
Merci ! Je veux vous faire savoir ce que j'ai :
1. Pas de changement de mémoire - de 10 gigaoctets le code actuel mangeait de la RAM ici et là.
2. En vitesse :
2.1 Ancienne version 574 secondes
2.2 Nouvelle version : 138 secondes.
Vous obtenez donc un gain de 4 fois, ce qui est plutôt bien ! Cependant, la mémoire est limitée, et c'est loin d'être tout ce qui doit être chargé.....
très pratique :)
J'ai donc converti le CSV en binaire, sans la date.
Il s'avère qu'en s'exécutant, le script a utilisé 1 gigaoctet de mémoire, ce qui, comparé à 10, est très bien. Cependant, c'est toujours beaucoup :)
En termes de vitesse - seulement 16 secondes ! Très bien !
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 cela sera suffisant pour vous.
En fait, le troisième paramètre de ArrayResize() est spécifié pour une raison... C'est un mauvais changement.
Lisez la documentation
En fait, le troisième paramètre de ArrayResize() est spécifié pour une raison... un changement de plume...
Lisez la documentation
Qu'avez-vous appris de la documentation sur le troisième paramètre, utile dans ce cas, pour résoudre le problème de la mise en mémoire de .csv créés dans différents programmes et ayant une taille arbitraire ?
N'hésitez pas à suggérer une meilleure modification, non binaire, qui augmente la vitesse de réallocation de la mémoire (en réduisant le nombre d'appels ArrayResize) plus que la recherche binaire...
Merci ! Je vous ferai savoir ce qui en ressort :
1. Pas de changement de mémoire - de 10 gigaoctets le code actuel mangeait de la RAM ici et là.
2. En vitesse :
2.1 Ancienne version 574 secondes
2.2 Nouvelle version : 138 secondes.
Vous obtenez donc un gain de 4 fois, ce qui est plutôt bien ! Cependant, la mémoire est étroite, et il n'y a pas grand-chose à charger.....
Après la lecture, dans bool CSVReader::Load(int start_line), après la ligne
FileClose(filehandle) ;
insérer la libération de la mémoire
ArrayResize(m_cells,m_total_rows*m_total_columns) ;
Libère inutilement 0-50% de la mémoire occupée par les m_cells. Seulement m_cells lui-même, sans le contenu des cellules.
Je suis en train de créer une petite bibliothèque pour travailler rapidement avec les CSV.
Sur la capture d'écran se trouve un essai qui passe en 7 secondes ! !! Processeur Xeon, fréquence 3.0.
Tout d'abord, le script établit le format des données pour chaque colonne. Il y a 6 colonnes. Ensuite, 1000000 lignes sont ajoutées au tableau, puis elles sont remplies avec des nombres de 0 à 999999. Selon le format des données, les chiffres peuvent être perçus différemment. Ensuite, tout est enregistré dans un fichier.
La taille du fichier est de 65,4 Mo. L'ensemble de la structure occupait 232 Mo en mémoire.
J'ai donc converti le CSV en binaire, sans la date.
Il s'avère qu'en s'exécutant, le script a utilisé 1 gigaoctet de mémoire, ce qui, comparé à 10, est très bien. Cependant, c'est toujours beaucoup :)
En termes de vitesse - seulement 16 secondes ! Très bien !
Eh bien, le script lui-même est toujours paralysé.
Après la lecture, dans bool CSVReader::Load(int start_line), après la ligne
FileClose(filehandle) ;
ins ins ins de mémoire de libération
ArrayResize(m_cells,m_total_rows*m_total_columns) ;
Libère inutilement 0-50% de la mémoire occupée par m_cells. Seulement m_cells lui-même, sans le contenu des cellules.
Merci, mais après avoir fermé le fichier/fini le script, la mémoire est rapidement libérée de toute façon. Voici comment réduire la consommation tout en courant....
Je suis en train de créer une petite bibliothèque pour la manipulation rapide des CSV.
Sur la capture d'écran se trouve un essai qui passe en 7 secondes ! !! Processeur Xeon, fréquence 3.0.
Tout d'abord, le script établit le format des données pour chaque colonne. Il y a 6 colonnes. Ensuite, 1000000 lignes sont ajoutées au tableau, puis elles sont remplies avec des nombres de 0 à 999999. Selon le format des données, les chiffres peuvent être perçus différemment. Ensuite, tout est enregistré dans un fichier.
La taille du fichier est de 65,4 Mo. L'ensemble de la structure occupait 232 Mo en mémoire.
Très intéressant. Envisagez-vous de publier vos réalisations en matière de programmation ?
Eh bien, le script lui-même est toujours un désordre.
Pouvez-vous me dire ce qu'il faut réparer ?