web-dev-qa-db-fra.com

Rapide et meilleure technique de file d'attente de producteur / consommateur BlockingCollection vs file d'attente simultanée

J'utilise Generic.Queue en C # 3.0 et Monitor.Enter, attendez, quittez wait avant de consommer la file d'attente (attendez que l'élément soit mis en file d'attente). Maintenant, je passe au C # 4.

Quelqu'un peut-il me suggérer lequel est le plus rapide et le meilleur, surtout pour éviter les verrous ..

BlockingCollection vs concurrentQueue ou toute autre chose ...

Remarque. Je ne veux pas restreindre mon producteur

Merci d'avance..

38
C-va

BlockingCollection et ConcurrentQueue sont là précisément pour cette raison. Je doute que vous trouverez quelque chose de mieux ou de plus simple à utiliser. L'équipe des extensions parallèles connaît son métier :)

Mais juste une vérification rapide des versions - vous utilisez certainement .NET 4, pas seulement C # 4? (Par exemple, vous pouvez utiliser Visual Studio 2010 et donc C # 4, mais toujours cibler .NET 3.5, auquel cas vous ne pouvez pas utiliser les extensions parallèles.)

Vous pouvez également commencer à rechercher modèle asynchrone basé sur les tâches , flux de données TPL et les fonctions asynchrones/en attente de C # 5 ... évidemment, vous Je ne peux pas encore les utiliser, mais ça ne fait pas de mal de savoir ce qui s'en vient.

110
Jon Skeet