Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 69126|Répondre: 4

[Source] Collection de sécurité de fils .NET/C# (classement)

[Copié le lien]
Publié sur 06/06/2017 17:13:53 | | |
Les collections introduites dans le .NET Framework 1.0 se trouvent dans l’espace de noms System.Collections. Ces collections, y compris les couramment utilisées ArrayList et Hashtable, offrent une certaine sécurité de thread via la propriété Synchronized, qui renvoie un wrapper thread-safe lié à la collection. L’enveloppe fonctionne en verrouillant l’ensemble complet à chaque opération d’ajout ou de suppression. Par conséquent, chaque thread tentant d’accéder à la collection doit attendre son tour pour acquérir le verrou. Cela n’est pas évolutif et entraînera une dégradation significative des performances pour les grandes collections. De plus, ce modèle n’empêche pas complètement la contention. Pour plus d’informations, voir la page suivante sur le site MSDN : Synchronisation dans les collections génériques

La classe de collection introduite dans le .NET Framework 2.0 se trouve dans l’espace de noms System.Collections.Generic. Ces classes de collection incluent <T>Liste, Dictionnaire< TKey, TValue> etc. Ces classes offrent une sécurité et des performances de type supérieures à celles de .NET Framework 1.0. Cependant, la classe de collection .NET Framework 2.0 ne fournit aucune synchronisation de thread ; Lors de l’ajout ou de la suppression d’éléments sur plusieurs threads simultanément, le code utilisateur doit fournir toute la synchronisation.

Nous vous recommandons d’utiliser des classes de collection concurrentes dans .NET Framework 4 car elles offrent non seulement la sécurité des types des classes de collection .NET Framework 2.0, mais aussi une sécurité des threads plus efficace et complète que la sécurité des threads fournie par la collection .NET Framework 1.0.


Certains types de collections concurrentes utilisent des mécanismes de synchronisation légers tels que SpinLock, SpinWait, SemaphoreSlim et CountdownEvent, qui sont nouveaux dans le .NET Framework 4. Typiquement, les types de synchronisation ci-dessus utilisent une « tournée active » pendant une courte période avant de placer le thread en état d’attente réelle. Si le temps d’attente est censé être très court, le spin consommera beaucoup moins de ressources de calcul que l’attente, ce qui implique des conversions de noyau consommant beaucoup de ressources. Pour les classes de collection qui utilisent la rotation, cette efficacité signifie que plusieurs threads peuvent ajouter et retirer des éléments à un rythme très rapide. Pour plus d’informations sur la limitation et le blocage, voir SpinLock et SpinWait. Les classes ConcurrentQueue<T> et ConcurrentStack<T> n’utilisent pas du tout de verrous. Ils s’appuient plutôt sur les opérations Interlocked pour la sécurité des fils.

illustrer

Parce que les classes de collection concurrentes supportent ICollection, elles fournissent des implémentations pour les propriétés IsSynchronized et SyncRoot, même si elles ne sont pas liées. IsSynchronized renvoie toujours faux, tandis que SyncRoot est toujours nul (rien dans Visual Basic).

Le tableau suivant liste les types de collections dans l’espace de noms System.Collections.Concurrent.



type
description
BlockingCollection<T>
Fournit<T> tout type de limitation et de blocage pour la mise en œuvre d’IProducerConsumerCollection. Pour plus d’informations, voir Aperçu de BlockingCollection.
ConcurrentDictionary<TKey, TValue>
Key/value est une implémentation sécurisée du dictionnaire en thread.
ConcurrentQueue<T>
Implémentation de la sécurité des threads des files d’attente FIFO (premier entré, premier sorti).
ConcurrentStack<T>
Implémentation sécurisée des stacks LIFO (last-in, first-out).
ConcurrentBag<T>
Implémentation sécurisée en thread d’une collection d’éléments hors ordre.
IProducerConsumerCollection<T>
les types doivent être implémentés dansBlockingCollectionInterfaces utilisées dans le







Précédent:.net/c# itextsharp pour générer du code PDF
Prochain:Install-Package : « MvvmLightLibs » a déjà une dépendance définie pour « CommonServiceLocator »...
Publié sur 08/11/2017 15:24:45 |
Oui, j’ai appris
 Propriétaire| Publié sur 08/02/2021 10:00:41 |
La liste est<T> thread-safe si elle n’est pas modifiée du tout pendant l’itération.
 Propriétaire| Publié sur 23/03/2021 11:32:46 |
ConcurrentDictionary prend en charge les mises à jour nouvelles et mises à jour
https://www.itsvse.com/thread-2955-1-1.html

 Propriétaire| Publié sur 24/06/2023 14:20:57 |
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com