Dans Ruby, quelle est la méthode la plus efficace pour lire des fichiers texte géants? De l'ordre de 10 lignes avec 89 octets/ligne. Une méthode est-elle significativement meilleure qu'une autre?Méthode la plus efficace pour lire les entrées dans Ruby
Répondre
J'ai fait quelques tests il y a quelques temps pour voir ce qui serait un bon moyen de charger un fichier texte. Le plus rapide était de lire des blocs de texte, puis de les parcourir en utilisant String.lines.
lecture d'un fichier texte qui est 188,593,869 octets comme référence:
IO.foreach(ARGV.shift) do |li|
print li
end
time ruby test.rb root.mbox > /dev/null
#
# real 0m3.949s
# user 0m3.709s
# sys 0m0.182s
Je Dump à/dev/null pour supprimer l'écran E/S du moment.
Au lieu de lire exclusivement en ligne par ligne, le charger dans une grande partie itérer puis sur les lignes:
File.read(ARGV.shift).lines do |l|
print l
end
time ruby test.rb root.mbox > /dev/null
real 0m3.492s
user 0m3.281s
sys 0m0.209s
C'est de 0,5 seconde économie. Il a également aspiré 188 Mo de données, ce qui ne va pas bien si vous avez des fichiers plus volumineux. La bonne chose est que vous pouvez lui dire de charger le fichier entier, ce que j'ai fait, en utilisant read()
ou lui dire de limiter la taille de lecture.
est ici un nettoyé de sortie wc
pour le fichier texte pour votre référence:
lines: 2,465,369
words: 26,466,463
bytes: 188,593,869
Notez que 'File.read' sous Windows est [incroyablement lent] (http://phrogz.net/slow-file-reads-on-windows-ruby-1.9). Mieux vaut 'File.open ('foo', 'rb', &: read)' forcer le mode de lecture binaire (mais vous devez gérer vous-même les paires '\ r \ n' possibles). – Phrogz
- 1. La méthode la plus efficace pour ... Chaîne aléatoire unique
- 2. Méthode plus efficace pour saisir toutes les unités enfants
- 3. Méthode la plus efficace pour modifier un flux de données
- 4. Méthode la plus efficace pour surveiller une file d'attente
- 5. Méthode la plus efficace pour extraire des données d'une chaîne
- 6. Quelle est la méthode la plus efficace pour que les threads de travail attendent les tâches?
- 7. Méthode la plus efficace pour visiter les nœuds d'un DAG dans l'ordre
- 8. Méthode la plus efficace pour détecter les changements de colonne dans MS SQL Server
- 9. La méthode la plus efficace pour « carrelage » un tableau plus petit 2d dans un tableau plus 2d en AS3
- 10. Comment rendre la méthode d'extension [exemple] plus générique/fonctionnelle/efficace?
- 11. Quelle est la plus efficace méthode de communication inter-processus pour les services Web IIS
- 12. Quelle est la méthode la plus efficace pour faire une boucle dans SortedList en VB 2008?
- 13. Méthode plus simple/plus efficace de flux imbriqué si ... sinon?
- 14. Méthode la plus efficace pour extraire tous les numéros (naturels) d'une chaîne
- 15. La solution la plus efficace pour lire CLOB à String, et String à CLOB en Java?
- 16. Méthode la plus efficace pour interroger des tables jointes dans Filemaker Pro 10
- 17. La méthode de copie la plus rapide/la plus efficace entre S3 et EC2?
- 18. Méthode la plus efficace pour interroger plusieurs tables identiques dans des bases de données distinctes
- 19. Méthode la plus efficace pour générer des rapports dans MySQL sur des jeux de données volumineux
- 20. Méthode la plus efficace pour gérer une table maître dans un analyseur basé sur Java
- 21. Lire les données UTF8 (XML) de SQL Server 2005 de la manière la plus efficace
- 22. Le moyen le plus efficace pour écrire dans un fichier de largeur fixe (Ruby)
- 23. Le moyen le plus efficace pour ouvrir un fichier et lire les lignes?
- 24. La méthode la plus efficace pour dessiner plusieurs quads en OpenGL
- 25. Méthode la plus efficace pour trier/classer les objets dans la liste en fonction de l'attribut d'objet
- 26. Méthode la plus simple pour enregistrer les flux rss externes
- 27. Requête plus efficace dans mysql
- 28. Méthode efficace pour trouver la valeur dans "Table" C#
- 29. Gestion efficace des entrées au clavier
- 30. Méthode la plus efficace pour transférer des images vers un client Silverlight
-vous dire à traiter ligne par ligne ou comment? – tokland
Oui, ligne par ligne – mbm