optimieren parallele Operationen in WPF: BlockingCollection, Concurrentbag und List
Eine WPF -Anwendung wurde während Parallel.ForEach
Operationen mit List<T>
gefroren. Umschalten auf ConcurrentBag
löste das Problem auf. Dieser Artikel vergleicht BlockingCollection
und ConcurrentBag
als Alternativen zu List<T>
in Parallelverarbeitungskontexten.
blockingCollection: kontrollierte Parallelität
BlockingCollection
wickelt ein IProducerConsumerCollection<T>
, einschließlich ConcurrentBag<T>
. Die wichtigsten Vorteile sind:
gleichzeitiger Taschen: Uneingeschränkter gleichzeitiger Zugang
ConcurrentBag<T>
ist eine thread-sichere Sammlung, die gleichzeitige Ergänzungen und Entfernungen ermöglicht. Im Gegensatz zu BlockingCollection
bietet es keine Blockier- oder Größenbeschränkungen.
Auswählen der entsprechenden Sammlung
In Szenarien wie der ursprünglichen Frage, in denen weder Blockier- noch Größengrenzen erforderlich sind, fügt BlockingCollection
unnötige Komplexität hinzu. ConcurrentBag<T>
bietet die erforderliche Gewindesicherheit ohne Leistungsaufwand. Die Wahl hängt von den spezifischen Anforderungen Ihres parallelen Vorgangs ab:
ConcurrentBag<T>
WENN: Sie benötigen einen gleichzeitigen Zugriff auf Thread-Safe ohne Blockier- oder Größenbeschränkungen. Dies ist oft die beste Wahl für einfache parallele Aufgaben. BlockingCollection
WENN: Sie benötigen Blockierungsverhalten (z. B. Verbraucher warten auf die Produzenten) oder müssen die Größe der Sammlung steuern, um die Speicherverwendung zu verwalten. Das obige ist der detaillierte Inhalt vonBlockingCollection vs. ConcurrentBag vs. List: Welche Sammlung eignet sich am besten für parallele Vorgänge in WPF?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!