Bonjour,
Je développe un logiciel qui est interfacé avec un capteur laser. Celui-ci m'envoie la distance entre le capteur et l'objet qui se situe devant lui. Il travaille à 2000Hz. Je communique avec lui à travers une API fournit.
Pour faire simple, j'ai créé une thread qui est en interface avec ce capteur. Les trames reçues sont mises dans une Queue pour traiter aussi vite que possible et ne pas perdre de trame. Ensuite, une autre Thread vient prendre les trames et les décoder.
Pour un objet donné, je constitue un ensemble de points mesurés avec le capteur. Je fais ensuite des calculs sur cet ensemble de points.
Dans le module de calcul, pour améliorer les performances j'ai utilisé un Parallel.ForEach(). Cela fonctionne bien et j'ai amélioré mes temps de calcul.
Tout va bien tant que je fonctionne par étapes : 1) mesure d'un objet puis 2) calcul sur les points obtenus.
Pour encore gagner en productivité, j'aimerai : mesuré la pièce "n+1" pendant que je calcule la pièce "n". Et là, les problèmes commencent. J'ai régulièrement des pertes de trames. J'en conclu qu'il y a un conflit entre la fonction Parallel.ForEach() et les Threads d'acquisition de points.
Qu'en pensez-vous ? Comment améliorez les choses ?
J'ai essayé de mettre les Threads dans une priorité plus haute, voir même critique. Soit je n'ai pas réussi, soit ca ne fonctionne pas ...
Partager