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
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!!"
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 j'ai modifié la boucle
En rajoutant cette simple ligne, c'est effectivement méchamment rapide!!!!!!!!! mais y a un hic que je ne comprend pas!!!
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 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!!!!!
Partager