Comment accélérer l'écriture des données sur un fichier
islem1982
Messages postés22Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention 4 octobre 2007
-
1 oct. 2007 à 02:45
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 2008
-
4 oct. 2007 à 13:18
Bonjour tout le monde,
En essayant de programmer efficacement un algorithme de fouille de données, j'ai fait face à un problème majeur, à savoir le temps consommé par l'écriture des données sur un fichier. J'ai remarqué expérimentalement qu'il influence considérablement sur les temps d'exécution de la quasi-totalité des algorithmes de fouille de données (il est connu que ces algos consomment peuvent générer un nombre de résultats exponentiel [o(2^n) dans mon cas]). Ainsi, améliorer les temps consommés par toute implémentation dans l'écriture est d'une importance capitale.
La question est la suivante, y a-t-il des classes en C++ ou des techniques développés qui permettent d'accélérer l'écriture sur disque de données volumineuses?
Merci d'avance.
SIGMA
A voir également:
Comment accélérer l'écriture des données sur un fichier
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 1 oct. 2007 à 10:16
Je ne sais pas de quelle manière tu écris tes données mais une solution optimale et de bufferiser les données jusqu'à une certaine quantité (ex : 500.000 octets) puis de faire une écriture par bloc en utilisant l'API Win32 (CreateFile, WriteFile, CloseHandle).
Après à toi de détérminer la taille optimale pour ton buffer, en faisant des test successifs sur un cas nominal.
En gros tu mémorises une certaines quantité dans un buffer. Une fois le buffer plein, tu l'ecris d'un bloc dans ton fichier avec WriteFile. Ensuite tu remets ton buffer à zéro, et tu refais la même chose.
islem1982
Messages postés22Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention 4 octobre 2007 2 oct. 2007 à 03:27
Je tiens tout d'abord à vous remercier. L'idée d'utiliser un buffer est excellente mais je crois que techniquement (utiliser des fonctionnalités relatives à windows) soit très contraignant. En effet, utiliser de telles fonctionnalités va nuire à la portabilité de mon programme qui doit être assurée.
Y a-t-il une classe standard ou standarisée qui permet de gérer la bufferisation au sein du C++. Ainsi, je pourrais exécuter mon programme indépendamment du système d'exploitation.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 2 oct. 2007 à 16:49
Faut absolument utiliser un buffer. Aucun besoin des outils windows pour cela.
Il me semble que les outils du C++ (fstream, etc ...) gèrent deja un buffer avant d'écrire sur le disque, mais tu peux toujours le gérer toi meme.
Vous n’avez pas trouvé la réponse que vous recherchez ?