Benutzer mit den meisten Antworten
Parallel.ForEach lokale Variablen

Frage
-
Guten Morgen!
Eigentlich gab es vor kurzem dazu erst einen Thread, der mich aber nicht so richtig weiter gebracht hat. Ich wollte mal etwas mit Parallel.ForEach experimentieren, da ich eine foreach-Schleife habe, in der ich für jedes Element etwas aus einer Datenbank hole, es entzippen und deserialisieren muss. Also dachte ich, ich könnte das mit wenigen Handgriffen parallelisieren. Mir fliegt aber folgender Teil wegen fehlender Threadsicherheit um die Ohren:
using (MemoryStream outStream = new MemoryStream(dataUnzipped)) { outStream.Seek(0, 0); BinaryFormatter binFormatter = new BinaryFormatter(); sMatrix = (TG.Produktion.Tests.FilterResult)binFormatter.Deserialize(outStream); }
Ich bin davon ausgegangen, dass alles was ich innerhalt der Schleife instanziere keine Probleme macht. Jetzt habe ich erstmal die grundsätzlich Frage, ob ich das überhaupt mit diesem Ansatz lösen kann. Es gibt zwar von Parallel.ForEach eine überladene Variante und ein Beispiel mit einer threadlocal Variablen, aber ich bräuchte ja dann mehr als eine. Die Beispiele haben mich auch nicht weiter gebracht. Parallel etwas auf der Konsole auszugeben half mir nicht ;-).
Gruß
Michael
Antworten
-
Hallo Michael,
auch, wenn es sich schon erledigt hat. Zu diesem Thema gibt es auch ein freies MSDN-Online-"Ebook":
[Parallel Programming with Microsoft .NET]
http://parallelpatterns.codeplex.com/
In Deinem Fall also zum Beispiel:
[Parallel Loops]
http://msdn.microsoft.com/en-us/library/ff963552.aspx
[C# Code Samples]
http://parallelpatterns.codeplex.com/releases/view/50473#DownloadId=147298
dort mit [STRG-Shift-F] "Parallel.Foreach" ca. 26 Nutzungs Quellcode-Beispiele
[Answers to end of the chapter questions]
http://parallelpatterns.codeplex.com/releases/view/50473#DownloadId=146830
Weitere Infos:
[Samples for Parallel Programming with the .NET Framework 4 - Home]
http://code.msdn.microsoft.com/ParExtSamples/Wiki/View.aspx?title=de-DE[Download details: Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4]
Paradigmenwechsel:Entwurfsüberlegungen für parallele Programmierung
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=86b3d32b-ad26-4bb8-a3ae-c1637026c3ee
[Parallele Programmierung in .NET Framework]
http://msdn.microsoft.com/de-de/library/dd460693.aspx
Risiken der Parallelität:Lösungen für 11 häufige Probleme in Multithreadcode
Multicore-Programmierung im .NET-Umfeld - Teil 1
Multicore-Programmierung im .NET-Umfeld - Teil 2
Multicore-Programmierung im .NET-Umfeld - Teil 3
Webcast-Serie zu Parallel LINQ Technical Summit 2008: Bringing out the Best in Multicore Systems (engl.)
Technical Sumitt 2008: Developing Applications for Multi-Core Processors (engl.)
Technical Summit 2008: Keynote Webcast Serie: Entwickeln für Multi-Core Prozessoren[Parallel Computing Developer Center]
http://msdn.microsoft.com/en-us/concurrency/default.aspx[Parallel Programming with .NET - Site Home - MSDN Blogs]
http://blogs.msdn.com/b/pfxteam/- Als Antwort markiert Mike_Th Freitag, 17. September 2010 09:05
Alle Antworten
-
Mir fliegt aber folgender Teil wegen fehlender Threadsicherheit um die Ohren:
Michael,
gibt es mehr Angaben (Fehlermeldung/Exception/Ohrenschmerzen/Ohrensausen/Tinnitus) dazu,
auch auf welcher Codezeile genau?
Und was ist 'sMatrix' bei:
sMatrix = (TG.Produktion.Tests.FilterResult)binFormatter.Deserialize(outStream);
-
Hi Elmar,
dazu kommt schon wieder was...keine Sorge ;-). Nur die Idee der schnellen Umsetzung hat nicht funktioniert. Hatte mich kurz eingelesen und so einfach wie ich dachte war es dann doch nicht. Um jetzt einigermaßen vernünftige Fragen zu stellen, habe ich festgestellt, dass ich etwas mehr Hintergrund brauche. Das muss ich mal etwas strukturieren.
Ich hatte z.B. eine LINQ to Entity Abfrage in der Schleife, die ich parallelisieren wollte. Das ging irgendwie nicht. Dann bin ich im Zuge dessen über PLINQ gestolpert und habe die Abfrage raus genommen und mit PLINQ gemacht. Ging auch so richtig ;-). Habe einiges probiert und Exceptions über Exceptions bekommen. Da hat der Thomas ja zurecht nach gefragt. Bin bloß zu dem Schluß gekommen, das ich das nicht alles posten kann. Muss mich weiter einlesen und in kleinere Häppchen aufteilen.
Gruß
Michael
-
Hallo Michael,
auch, wenn es sich schon erledigt hat. Zu diesem Thema gibt es auch ein freies MSDN-Online-"Ebook":
[Parallel Programming with Microsoft .NET]
http://parallelpatterns.codeplex.com/
In Deinem Fall also zum Beispiel:
[Parallel Loops]
http://msdn.microsoft.com/en-us/library/ff963552.aspx
[C# Code Samples]
http://parallelpatterns.codeplex.com/releases/view/50473#DownloadId=147298
dort mit [STRG-Shift-F] "Parallel.Foreach" ca. 26 Nutzungs Quellcode-Beispiele
[Answers to end of the chapter questions]
http://parallelpatterns.codeplex.com/releases/view/50473#DownloadId=146830
Weitere Infos:
[Samples for Parallel Programming with the .NET Framework 4 - Home]
http://code.msdn.microsoft.com/ParExtSamples/Wiki/View.aspx?title=de-DE[Download details: Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4]
Paradigmenwechsel:Entwurfsüberlegungen für parallele Programmierung
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=86b3d32b-ad26-4bb8-a3ae-c1637026c3ee
[Parallele Programmierung in .NET Framework]
http://msdn.microsoft.com/de-de/library/dd460693.aspx
Risiken der Parallelität:Lösungen für 11 häufige Probleme in Multithreadcode
Multicore-Programmierung im .NET-Umfeld - Teil 1
Multicore-Programmierung im .NET-Umfeld - Teil 2
Multicore-Programmierung im .NET-Umfeld - Teil 3
Webcast-Serie zu Parallel LINQ Technical Summit 2008: Bringing out the Best in Multicore Systems (engl.)
Technical Sumitt 2008: Developing Applications for Multi-Core Processors (engl.)
Technical Summit 2008: Keynote Webcast Serie: Entwickeln für Multi-Core Prozessoren[Parallel Computing Developer Center]
http://msdn.microsoft.com/en-us/concurrency/default.aspx[Parallel Programming with .NET - Site Home - MSDN Blogs]
http://blogs.msdn.com/b/pfxteam/- Als Antwort markiert Mike_Th Freitag, 17. September 2010 09:05