parallel-extensions

___ answer1657936 ___

Sie suchen %code% . Die neuen parallelen Sammlungen verwenden deutlich verbesserte Sperrmechanismen und sollten in parallelen Algorithmen hervorragend funktionieren.

Bearbeiten: Das Ergebnis könnte wie folgt aussehen:

%Vor%

Wort der Warnung: Wenn die Elemente in %code% nicht alle ein eindeutiges %code% haben, dann könnte %code% zweimal für diesen Schlüssel aufgerufen werden. Im Beispiel wird der Schlüssel nicht an %code% übergeben, aber es bedeutet, dass der Code "Etwas mit Wert ausführen" die Paare key / valueA und key / valueB ausführen könnte und nur ein Ergebnis im Cache gespeichert würde (nicht notwendigerweise der erste von SomeIntensiveOperation entweder). Du brauchst eine parallele Lazy-Factory, um das Problem zu lösen. wenn es ein Problem ist. Aus naheliegenden Gründen sollte SomeIntensiveOperation Thread-sicher sein.

    
___ qstnhdr ___ Verwenden einer Hashtabelle innerhalb einer Parallel.ForEach? ___ answer1657938 ___

Verwenden Sie einen ReaderWriterLock, dies hat eine gute Leistung für Arbeiten, die viele Lesevorgänge und wenige Schreibvorgänge von kurzer Dauer haben. Ihr Problem scheint dieser Spezifikation zu entsprechen.

Alle Leseoperationen laufen schnell und sind frei, die einzige Zeit, die jemand blockiert wird, ist, wenn ein Schreibvorgang stattfindet, und dieser Schreibvorgang ist nur so lang wie es dauert, um etwas in eine Hashtable zu schieben.

ReaderWriterLockSlim auf MSDN

Ich denke, ich werde etwas Code wegwerfen ...

%Vor%     
___ qstntxt ___

Ich habe eine Parallel.ForEach-Schleife, die eine intensive Operation innerhalb des Körpers ausführt.

Die Operation kann eine Hashtable verwenden, um die Werte zu speichern, und kann für andere fortlaufende Schleifenelemente wiederverwendet werden. Ich füge der Hashtabelle hinzu, nachdem die intensive Operation abgeschlossen ist. Das nächste Schleifenelement kann in der Hashtable nachschlagen und das Objekt wiederverwenden, anstatt die intensive Operation erneut auszuführen.

Da ich jedoch Parallel.ForEach verwende, gibt es ein unsicheres Problem, was dazu führt, dass die Hashtable.Add- und ContainsKey (key) -Aufrufe nicht mehr synchron sind, da sie möglicherweise parallel ausgeführt werden. Die Einführung von Sperren kann zu Perf-Problemen führen.

Hier ist der Beispielcode:

%Vor%

Es muss eine API geben, Property-Einstellung in der TPL-Bibliothek, die dieses Szenario verarbeiten könnte. Gibt es?

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123parallelextensions __ Parallele Erweiterungen ist eine verwaltete Parallelitätsbibliothek, die in der .NET 4.0-Version enthalten ist. ___ answer1657902 ___

Ich sehe keine andere richtige Wahl, als (mehr oder weniger explizite) Sperren zu verwenden (eine synchronisierte Hashtabelle überschreibt einfach alle Methoden mit Sperren).

Eine weitere Option könnte sein, dass das Wörterbuch nicht mehr synchron läuft. Die Racebedingung wird das Wörterbuch nicht beschädigen, es wird lediglich der Code benötigt, um einige überflüssige Berechnungen durchzuführen. Profilieren Sie den Code, um zu prüfen, ob die Sperre oder die fehlende Memoisierung schlechtere Auswirkungen hat.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123taskparallellibrary ___ Die Task Parallel Library ist Teil von .NET 4 und .NET 4.5. Es ist eine Reihe von APIs, mit denen Entwickler asynchrone Anwendungen programmieren können. ___ answer1657940 ___

Überprüfen Sie den System.Collections.Concurrent -Namespace Ich denke, dass Sie ConcurrentDictionary

benötigen     
___
2
Antworten

Mit Parallel Linq Extensions zur Vereinigung von zwei Sequenzen, wie kann man zuerst die schnellsten Ergebnisse erzielen?

Nehmen wir an, ich habe zwei Sequenzen, die die Ganzzahlen 1 bis 5 zurückgeben. Der erste gibt 1, 2 und 3 sehr schnell zurück, aber 4 und 5 benötigen jeweils 200 ms. %Vor% Die Sekunde gibt 1, 2 und 3 mit einer Verzögerung von 200ms zurück...
09.11.2011, 13:25
1
Antwort

Wie kann ich die Anwendungsdomänenausnahme verhindern, nachdem NUnit den PLINQ-Code getestet hat?

Wie kann ich AppDomainUnloadedException diagnostizieren und minimieren oder verhindern? NUnit 2.5.2 liefert konsistent AppDomainUnloadedException nach langen (& gt; 10s) Tests mit PLINQ. Zurück im Juli 2008 Stephen Toub sagte :  ...
27.08.2009, 10:28
1
Antwort

Parallel. Für Schrittgröße

weiß jemand, ob es Überlastung gibt, die es mir erlauben würde, eine Schrittgröße in einer Parallel.For-Schleife anzugeben? Beispiele in c # oder VB.Net wären großartig. Danke, Gonzalo     
22.08.2011, 01:51
3
Antworten

Was ist der beste Weg, um eine parallele Endlosschleife zu erreichen?

Ich habe mich daran gewöhnt, Parallel.For () in den parallelen Erweiterungen von .Net zu verwenden, da es eine einfache Art ist, Code zu parallelisieren, ohne manuell Threads starten und warten zu müssen (was fiddly sein kann). Ich schaue jetzt...
29.12.2011, 18:26
2
Antworten

Warum ist die TaskFactory.StartNew-Methode nicht generisch?

Die idente Methode zum Starten einer neuen Nur-Nebeneffekt-Aufgabe (dh eine Aufgabe, die kein Ergebnis liefert) mit der TPL in .NET 4.0 verwendet die folgende API: %Vor% Aber warum sieht die Signatur dieser API nicht so aus? %Vor% oder w...
03.12.2009, 14:10
1
Antwort

Azure TableQuery Thread-Sicherheit mit Parallel.ForEach

Ich habe einige grundlegende Azure-Tabellen, die ich seriell abgefragt habe: %Vor% Um dies zu beschleunigen, habe ich das parallelisiert: %Vor% Dies führt zu einer erheblichen Beschleunigung, aber die Ergebnisse neigen dazu, zwischen den...
05.10.2014, 06:37
4
Antworten

Verwenden einer Hashtabelle innerhalb einer Parallel.ForEach?

Ich habe eine Parallel.ForEach-Schleife, die eine intensive Operation innerhalb des Körpers ausführt. Die Operation kann eine Hashtable verwenden, um die Werte zu speichern, und kann für andere fortlaufende Schleifenelemente wiederverwendet w...
01.11.2009, 18:20