SOCKET Traiter en parallèle des trames tcp avec le threadPool
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:
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:
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!!!!!