mercier79u / Gaspar

0 stars 0 forks source link

2 lectures du même fichier #4

Open FlorianKromer opened 4 years ago

FlorianKromer commented 4 years ago

Est ce qu'il n' y a pas moyen de capitaliser sur la 1ère lecture du fichier?

https://github.com/mercier79u/Gaspar/blob/08598e5b74313d61574eab1a7b955769bf0ed999/Test/Tests.cs#L152-L157

FlorianKromer commented 4 years ago

De ce que je comprends tu utilises un dictionnaire pour valider l'unicité des clés insérées, et c'est bien par contre tu ne sers pas du libellé car tu construis directement ta requête.

Je te propose de tester l'utilisation d'une structure hashset même fonctionnement qu'un dico sauf qu'on stocke juste la clé.


Sinon à titre expérimental et uniquement pour cette méthode tu pourrais t’intéresser au multithreading. Imagine que tu as 4 ouvriers disponibles et que tu n'en utilise qu'un pour l'instant: c'est dommage. Tu pourrais leur confier aux 4 le même travail et lorsqu'ils ont tous fini tu passes à la suite. Cela permet d’accélérer le travail mais il faut gérer le "partage du travail" il ne faut pas qu'ils se marchent dessus.

Si on fait le parallèle avec ta méthode, plusieurs ouvriers pourraient faire le travail réalisé dans ta boucle.

L'ouvrier 1 aurait la 1ère ligne à gérer,

-> il doit vérifier que le risque n'est pas présent dans le dico,

---> si c'est le cas il l'ajoute

L'ouvrier 2 aurait la 2ème ligne à gérer,

-> il doit vérifier que le risque n'est pas présent dans le dico,

---> si c'est le cas il l'ajoute

Par contre il te faudra un dictionnaire qui soit consultable par plusieurs personne à la fois. Concrètement, je te conseille de duppliquer cette méthode pour en faire une "bis". Ensuite tu vas pouvoir diviser le travail avec Parallel.ForEach et utiliser un dictionnaire "partagé" grâce à un ConcurrentDictionary

Quand ta boucle parallèle est finie tu parcours le dictionnaire et tu construis ta requête SQL