Je cherche à utiliser les avantages de la programmation parallèle dans linq en utilisant plinq, je ne suis pas sûr de comprendre l'utilisation entièrement mis à part le fait qu'il va faire usage de tous les cœurs de cpu plus efficacement donc pour une grande requête, il pourrait être plus rapide. Puis-je simplement appeler AsParallel() sur les appels linq pour utiliser la fonctionnalité eplinq et ce sera toujours plus rapide? Ou devrais-je l'utiliser uniquement lorsqu'il y a beaucoup de données à interroger ou à traiter?Quand devrais-je utiliser AsParallel() dans linq/plinq
Répondre
Vous ne pouvez pas supposer que l'exécution en parallèle est toujours plus rapide. Ça dépend. Dans certaines situations, vous gagnerez beaucoup sur les processeurs multi-core en faisant les choses en parallèle. Dans d'autres cas, vous allez simplement ralentir les choses, car les boucles parallèles ont une petite surchauffe par rapport aux boucles simples.
Par exemple, voir my other answer qui explique pourquoi les boucles parallèles intégrées peuvent être un désastre.
Maintenant, le meilleur moyen de savoir s'il est judicieux d'utiliser une boucle parallèle dans un contexte précis est pour tester des implémentations parallèles et non parallèles et de mesurer le temps qu'ils prennent.
Pour ajouter à la réponse, cela dépend également de vos données. Aller un peu «vieille école» pour un moment, vous pourriez aller sur la route de la boucle déroulant, en utilisant pour au lieu de foreach et ainsi de suite et ainsi de suite.
Cependant, vous devez vraiment vous assurer que vous n'effectuez pas de micro-optimisation. En fonction de vos extractions de données et de la taille des données (certainement avec des données paginées), vous pouvez probablement vous en passer sans l'utiliser. Cela ne veut pas dire que le fait de prendre conscience de votre linq mult-core n'est pas cool. Mais soyez conscient des coûts de mise en place de faire quelque chose comme ça et ainsi être en mesure de peser les avantages par rapport aux complexités de la maintenance et du débogage de ce code.
Si votre algorithme est déjà de premier ordre, alors en regardant les extensions plinq, un mécanisme de réduction de carte ou similaire peut être le chemin à parcourir. Mais vérifiez d'abord votre algorithme et vos avantages globaux. Opérer sur le bon type de collection (etc) dans le bon type de manière apportera toujours ses propres avantages (et problèmes!).
Qu'essayez-vous de résoudre?