peyramay
Messages postés3Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention22 juin 2010
-
24 janv. 2009 à 22:31
WishhhMaster
Messages postés327Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention10 avril 2010
-
25 janv. 2009 à 21:24
Bonjour,
je suis en train de réaliser une application pour le boulot qui doit
trier et filtrer les doublons dans de nombreux fichiers de données en
ASCII.
Chaque fichier ASCII est délimté par des tabulations et la premiere ligne represente les entete des fichiers.
Le trie ainsi que le filtre sont réalisés sur champs donte le premier une date GPS est le plus significatif.
J'ai donc créér une classe trame ayant pour attributs les champs à
trier et une classe fichier représentant l'ensemble des trames du
fichier à trier et filtrer.
Mais vue le nombre de fichiers et le nombre de lignes à filtrer et trier ,je dois absolument optimiser le temps d'éxécution.
Voici mon code:
public void Creation(string pathOut)
{
string ligne="";
string lastLigne = "";
StreamReader sr=null;
Trame tr;
Stopwatch monSWtest1 = new Stopwatch();
long temps = 0;
//Lecture du fichier
try
{
sr = new StreamReader(g_pathFile + "\" + g_nameFile);
peyramay
Messages postés3Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention22 juin 2010 25 janv. 2009 à 14:50
Salut et merci pour ta réponse,
c'est vrai qu'il n'est pas nécéssaire de lire toutes les lignes.
cela vient du fait que je voulais tenter de remplir l'objet this qui représente une liste générique d'ojets trames à partir du tableau de lecture du fichiers mais sans succes.
this.AddRange(File.ReadAllLines(g_pathFile + "\" + g_nameFile) as Fichier);
Je pensais que pour optimser la lecture de ces fichiers j'aurais pu utiliser une méthode de sérialisation mais ces méthodes ne propose rien pour la lecture et l'écriture des fichiers ASCII j'ai donc essayer de le "sérialiser" en force.
Puis jouer sur l'overide des méthodes sort et contains de la liste generique d'objets que j'ai crée à partir de la sérialisation.
D'ailleurs je ne sais pas trop comment m'y prendre pour surchager ces methodes et surtout si cela m'apportera un gain de vitess en éxécution.
WishhhMaster
Messages postés327Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention10 avril 20108 25 janv. 2009 à 21:24
Salut,
Juste un truc que j'ai remarqué. Est-ce que Trame est une classe ou une structure? Si c'est une classe, Contains retourne true si l'objet Trame que tu vas essayer d'ajouter est déjà présent dans la liste, c'est-à-dire la même référence. Donc si tu testes Contains avec un nouvel objet Trame, même si l'objet à les même propriétés qu'un objet existant ça te retournera false.
this.Add(new Trame(ligne)); //ajoute une nouvelle Trame
bool ret this.Contains(new Trame(ligne));//ajoute une nouvelle Trame avec les même caractéristiques> ret est false
Si dans l'exemple précédent tu veux que Contains retourne true, tu peux utiliser la surcharge de Contains qui prend un IEqualityComparer. Mais ça n'éméliorera sans doute pas la vitesse, au contraire.
Pour trier tes trames, regarde les surcharges de Sort. Il y a une qui prend un ICOmparer en paramère, ce qui te permet de spécifier comment faire le tri.