Rapide et Meilleur Producteur/consommateur file d'attente de la technique BlockingCollection vs simultanées de la File d'attente
Im de l'utilisation de Générique.La file d'attente en C# 3.0 et d'un Moniteur.Entrez,attendre la sortie pour attendre avant de consommer de la file d'attente (en attente de l'élément à être mis en file d'attente). Maintenant je suis passer au C# 4.
Quelqu'un peut-il me suggérer qui est rapide et le meilleur en particulier pour éviter les verrous..
BlockingCollection vs concurrentQueue ou toute autre chose...
Note. Je ne veux pas limiter mon producteur
Merci d'avance..
Vous devez vous connecter pour publier un commentaire.
BlockingCollection
etConcurrentQueue
sont là précisément pour cette raison. Je doute que vous trouverez quelque chose de mieux, ou plus simple à utiliser. Parallel extensions de l'équipe savent de quoi ils parlent 🙂Juste une vérification rapide sur les versions si - vous êtes certainement à l'aide .NET 4, non seulement C# 4? (Par exemple, vous pourriez être à l'aide de Visual Studio 2010 et ainsi, C# 4, mais encore le ciblage .NET 3.5, auquel cas vous ne pouviez pas utiliser Parallel Extensions.)
Vous pouvez aussi lancer des recherches sur Basée Sur Les Tâches Du Modèle Asynchrone, TPL Dataflow et la async/await fonctionnalités de C# 5... de toute évidence, vous ne pouvez pas les utiliser tout de suite, mais il ne fait pas de mal de savoir ce qui est à venir.
ConcurrentQueue
puis l'envelopper dans unBlockingCollection
qui coordonne l'Ajout/Prendre les méthodes. (Vous pouvez ensuite laisser gérer la file d'attente complètement - vous de ne pas toucher à la ConcurrentQueue directement vous-même par la suite.)ConcurrentQueue
, et puis créer unBlockingCollection
pour l'envelopper. Ensuite, utilisez laBlockingCollection
exclusivement. (En fait, si vous venez de créer un BlockingCollection sans passer quelque chose pour le constructeur, il va créer un ConcurrentQueue pour vous, mais vous devez comprendre ce qui se passe.)BlockingCollection
peut être réitéré à l'aide d'unParallel.For
, qui est similaire à l'utilité d'un PCQ, et éventuellement un peu plus facile (peut-être BEAUCOUP plus facile) pour fouetter le code.