Salut tout le monde,
J ai un fichier texte qui 7 GO.
Et je voudrais connaitre la meilleure méthode pour trouver un "mot" dans ce fichier de manière la plus rapide possible.
Cordialment.
Salut tout le monde,
J ai un fichier texte qui 7 GO.
Et je voudrais connaitre la meilleure méthode pour trouver un "mot" dans ce fichier de manière la plus rapide possible.
Cordialment.
Il y a deux choses qui vont impacter au maximum sur le temps de réponse :
-1- la façon de lire les données
-2- l'algorithme utilisé pour tester les chaînes
Concernant le point n°1 il faut un système le plus proche possible de la machine utilisant des buffer assez grands. Un file stream pourrait faire l'affaire mais certainement vu la taille du fichier à traiter l'accès direct à certaines API win32 donnerait encore de meilleures résultats, notamment les fichier mappés en mémoire.
Pour le point n°2, l'algorithme considéré comme le plus efficace est le Boyer-Moore. Il en existe des implémentations Delphi, une recherche google t'en dira plus.
7Go !!!
Effectivement j'utiliserais un FileStream mais surtout pas un fichier mappé en mémoire vu la taille de l'engin (7Go quand même, Windows ne va pas suivre ni même survivre...)
Et oui 7Go.......
Bon merci a tous , je vais appliqué vos conseils.
tu te trompes ... les memory map files (fichiers mappés mémoire) de Win32 sont justement conçus pour améliorer les performances de traitement des gros fichiers...Envoyé par waskol
Cette technique donne de bien meilleurs résultats que les filestreams mais est un peu plus délicate à mettre en oeuvre puisque Delphi n'offre rien pour le faire (donc appels aux api win32 "à la main").
Ha ? Alors si tu le dis...Envoyé par Merlin
En fait je pensais, vu la taille du fichier (7Go), et vu qu'il ne doit pas avoir 7Go de RAM installé sur sa machine, son PC risquerais de swapper un max non ?
Bref, si tu suis mon raisonnement, son programme va peut-être gérer un fichier mémoire, mais qui de toute façon sera créé par windows sur le swap de son disque dur. Par conséquent, windows gèrera quand même un fichier disque (le swap), ce qui revient à dire qu'à l'arrivée, niveau perfs, ce sera "kif kif bouricot" avec l'utilisation d'un TFilestream mais en plus compliqué.
De plus, lorsque Windows va tenter de créer un fichier mappé en mémoire de 7 Go, voyant qu'il a 512Mo (<- en supposant qu'il y ait 512Mo installé sur sa machine) de RAM à sa dispo, va agrandir son swap d'une taille approximativement égale à 6,5 Go... Ce qui implique d'avoir de la place sur son disque dur (oui, de nos jours, ce n'est plus vraiment un problème mais quand même !)
Tu vois ce que je veux dire ?
Bref, je me trompe surement auquel cas ce serais sympa que tu éclaires ma lanterne à ce propos parce que je reste tout de même dubitatif sur la question
Partager