cs_vladam
Messages postés216Date d'inscriptiondimanche 13 janvier 2002StatutModérateurDernière intervention 7 novembre 2009
-
24 déc. 2008 à 13:46
cs_vladam
Messages postés216Date d'inscriptiondimanche 13 janvier 2002StatutModérateurDernière intervention 7 novembre 2009
-
26 déc. 2008 à 14:51
Bonjour,
J'ai deux fichiers texte, avec dans chacuns d'eux une liste de mail. Le premier est la liste complète de mes abonnés (newsletter) et le second est la liste des abonnés ayant ouvert ma dernière newsletter. les fichiers sont des fichiers texte, avec un mail par ligne (pas de séparateur, juste un retour à la ligne pour chaque record).
Je veux faire une fonction me permettant de ressortir la liste de tous les Email, n'yant pas ouvert ma newsletter. Donc :
Je veux comparer le fichier A avec le fichier B pour ressortir tous les mails du fichier A qui sont aussi dans le fichier B.
Je suis sûr qu'il existe un algorithme dans existant pour optimiser au maximum le temps de traitement (ma fonction doit exécuter cela le plus rapidement possible, avec + de 130 000 records dans chaque fichier).
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 25 déc. 2008 à 10:44
C'est possible, mais je ne pense pas que LINQ soit une très bonne idée car il fera de bête comparaisons entre tout les éléments...
Il doit y'avoir moyen de faire mieux, peut-être en rangeant les éléments dans une hashtable (pour la clef, éven. la première lettre de l'adresse eMail?).
cs_vladam
Messages postés216Date d'inscriptiondimanche 13 janvier 2002StatutModérateurDernière intervention 7 novembre 2009 26 déc. 2008 à 12:06
Bonjour,
Je ne veux pas utiliser LINQ, car au niveau optimisation, c'est très moyen. Disons que LINQ n'est pas vraiment fait pour faire ça, même s'il peut se connecter a des fichiers textes.
L'idée du HashTable n'est pas bête en effet, mais peut-il tenir plusieurs centaines de milliers de record, pas sur ...
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 26 déc. 2008 à 12:52
Pour linq,
Je ne pensais pas a travailler sur le fichier texte directement, mais en chargeant les lignes dans une list<string>
En suite pour la hashtable tu es limité à la taille de ta mémoire
pour pas avoir trop de perte de performance tu peux à l'instanciation choisir une capacity
importante de facon ca ce que cette derniere ne soit pas recalculer quand les paniers sont trop pleins.
De toute facon, tu peux tenter les deux méthodes et comparer les résultat au niveau
temps (avec un stopwatch) et occupation memoire.
Bon courage
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_vladam
Messages postés216Date d'inscriptiondimanche 13 janvier 2002StatutModérateurDernière intervention 7 novembre 2009 26 déc. 2008 à 14:51
Voila, ça tourne !
Je charge le premier fichier (le plus gros) en mémoire dans des listes de ma création (liste chainées encapsulées dans une liste chainée circulaire).
Cela me permet d'associer une liste d'index en plus avec les domaines.
La première liste chainée circulaire me permet d'indexer la première lettre des émails. Chaque éléments de cette liste circulaire est une liste simple de ses composants.
Pendant le chargement, je place aussi tous les domaines différents dans un HashTable afin de générer à la fin une table d'index.
Top performance ;)
c'est plus une conception de type C++, mais c'est plus performant qu'en utilisant le framework.Net uniquement.