Bonjour,
J'avais des problèmes de lenteurs lors de la réception de paquet pour les fichiers un peu plus gros, car je traitais les trames une par une à la file. Voilà en gros le code de réception

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
   byte [] paquetRecu=new byte[1024];
   while(true)
   {
     int k= socket.receive(paquetRecu)
     //ensuite je dois traiter le paquet pour en extraire la position dans le fichier total et bien sûr, ajouter le contenu des octets pour la reconstitution
     traitementPaquetRecu(paquetRecu)
   }
Donc voilà à la base, j'écoute et je traite le paquet,ça fonctionne mais c'est assez lent. Donc je me suis dit " et si je traitais les paquets en parallèle!!"

donc j'ai modifié la boucle

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
byte [] paquetRecu=new byte[1024];
   while(true)
   {
     int k= socket.receive(paquetRecu)
 
     // je dois créer un nouvel objet à chaque fois avant d'envoyer dans le    thread, sinon la valeur sera modifié pour tous les threads lors de la  réception d'un nouveau paquet
     byte [] paquetTraite=new byte [1024];
     paquetRecu.CopyTo(paquetTraite,0);
 
    //ThreadPaquetRecu est la méthode contenant traitementPaquetRecu()
      ThreadPool.QueueUserWorkItem(new  WaitCallback(ThreadPaquetRecu), paquetTraite);
}
En rajoutant cette simple ligne, c'est effectivement méchamment rapide!!!!!!!!! mais y a un hic que je ne comprend pas!!!

En faisant un "console.writeLine(numero de bloc en cours+ numBloc)" dans la méthode threadé(traitementPaquetRecu()), j'obtiens:

1
2
4
5
6
6
6
7
7
7
8
8
8
8
10
....
Je précise que le numero de bloc est une information que j'envoie dans chaque paquet pour calculer à quel position je dois placer la série d'octets.

Bref vous constatez qu'en utilisant threadPool c'est rapide, mais je traite apparemment des paquets en double et il y en certains qui sont totalement "zappés" au vue du listing des numéros de bloc traité ci-dessus...

Au final je reconstitue mon fichier rapidement mais quelques trous dedans, pourquoi le threadPool se comporte de cette facon?

NEED HELP!!!!!