Bonjour,
Je dois effectue un nombre conséquent d'extractions de caractères pour chaque ligne lue dans un fichier relativement gros (260 000 lignes mais qui pourra attendre à l'avenir facilement 10 fois plus).
La lecture du fichier et le stockage dans une list sont instantannés (inférieur à la seconde).
Par contre le traitement de chaque ligne de cette list est beaucoup plus longue.
tout d'abord le code :
la variable "fichier_vecteur" contient une list<String> donc l'ensemble de mon fichier en entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 private void ecritureFichierSortie() { foreach (string ligne in fichier_vecteur) { fichierSortie.WriteLine(SplitAndSave(ligne)); } } private string SplitAndSave(string line) { // on récupère le code string code = line.Substring(debutChampsIdentifiant, tailleChampsIdentifiant); // on parcours les matrice de décodage et on enregistre dans le fichier de sortie string ligneSortie = string.Empty; foreach (LigneMatriceDecodage ligne in matrideDeDecodage) { if (String.Compare(code, ligne._code) == 0) { try { ligneSortie += line.Substring(ligne._debut, ligne._taille) + ";"; } catch (Exception e) { ligneSortie += string.Empty + ";"; } } else { ligneSortie += string.Empty + ";"; } } return ligneSortie; }
En mettant en commentaire la ligne :
de la fonction splitAndSave le traitement est ultra rapide. De même en le remplaçant par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ligneSortie += line.Substring(ligne._debut, ligne._taille) + ";";
le traitement ne dure que 3 secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2ligneSortie += ";"
en utilisant mon substring la durée du traitement s'envole à 16minutes.
Il est donc évident que c'est l'extraction des données via substring qui pose problème.
Je me demande donc si il existe une autre méthode/fonction nécessitant moins de temps de calcul pour récupérer mes données dans ce String (sachant qu'à la base je n'ai pas de délimiteur dans le fichier et que j'utilise donc une description du fichier pour faire mon découpage pour chaque ligne. Sachant aussi que la structure de la ligne dépend d'un code enregistrement qui se situe à la 25ème colonne de cette ligne ).
Partager