Bonjour,
J'aurai besoin de conseils vis à vis de l'optimisation de code.
Je dois lire un "gros" fichier texte d'environ 5Mo. Il est constitué d'environ 2000 lignes, dont certaines assez longues (> 4000 caractères).
Sur chacune de ces lignes sont encodées tous un tas de paramètres qui doivent être lus dans l'ordre d'écriture.
Sur une ligne, on va trouver des paramètres principaux séparés par un premier délimiteur. Pour chacun des paramètres principaux, il y a des paramètres secondaires séparées par un deuxième délimiteur. Et enfin pour chacun des paramètre secondaire, il y a des paramètres tertiaires séparés par un autre délimiteur.
Actuellement voici mon algo de lecture :
Pour tout le fichier :
Je lis une ligne.
J'utilise le split pour découper selon le 1 délimiteur.
Pour chacun des blocs obtenus, je redécoupe avec split pour le 2ème délimiteur.
Pour chacun des sous blocs, je (re)redécoupe avec split pour le 3ème délimiteur.
Dans un premier temps j'ai utilisé le String.split(). Après quelques recherches, je me suis rendu compte qu'il étais plus intéressant de précompiler le pattern de l'expression régulière et de la réutiliser à chaque fois (Pattern).
Maintenant je m'aperçois, via JProfiler que c'est cette dernière méthode qui est la plus gourmande dans mon algorithme. ça met environ 5sec à lire mon fichier, j'aimerai que ça descendre en dessous de la seconde, si c'est possible.
Avez vous des conseils d'optimisations à me donner ? (threader la lecture, changer la méthode de split, améliorer les expressions régulières, etc)
Voir même changer le format du fichier d'entrée si c'est vraiment pas jouable.
Partager