Bonjour
Je cherche actuellement à optimiser mon programme qui lit des données dans un fichier, j'ai lu certains articles à ce sujet, mais cela ne m'a pas vraiment éclairé.
Voici la situation :
Les fichier sont des fichiers de données brutes, organisées selon un structure précise : d'abord une date, puis un char, puis un int, et deux doubles, etc, le tout complété par une séquence de fin de bloc (\n\t\0\n). Seulement la plus grande partie de ces blocs est de taille variable.
Chaque fichier contient plusieurs de ces blocs, classés selon leur date (un fichier contient une heure d'enregistrement).
Mon programme et codé avec Qt, j'ustilise donc QFile et QDataStream pour lire et écrire le fichier (la date mentionnée plus haut est en fait un QTime sérialisé par le QDataStream). C'est fait de façon assez basique (un peu dans l'urgence) avec la méthode bétémé : stream >> QTime >> char >> int >> double etc.
La taille variable des blocs implique que je doive les lire en entier, même si je ne m'intéresse qu'à ceux d'après, pour arriver aux suivants.
Le problème est qu'actuellement, un fichier comprenant une heure complète prend à peu près 3 secondes à se lire, je vous laisse faire le compte lorsque que je charge 4 jours d'un coup.
Donc, j'aimerais savoir s'il existe un moyen d'accélérer la lecture de mes fichiers, une autre façon de coder à laquelle je n'aurais pas pensé ? La STL ou une autre librairie serait-elle plus performante ? Ou dois-je revoir la structure de mes fichier si je veux éviter les longues attentes ?
Question subsidiaire : devrais-je envisager de remplacer mon système "fait main" par un SGBD ? Sachant que la quantité de données enregistrées peut atteindre 500 Mo par jour, mais que seule l'application concernée y accède. J'ai vu par exemple SQLite, très intéressant pour son intégration dans l'application, mais que la taille de mes données ne rend pas viable.
Cordialement.
Partager