C# PLINQ wirklich sinnvoll?

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.103
Ich habe vor kurzem einen Artikel über PLINQ gelesen. Schein auf jeden Fall interesant zu sein. Habe darauf hin einen Test mit meine Anwendung gemacht. 1300 Datensätze wurden mit PLINQ und LINQ sortiert. Ich dachte, PLINQ machts schneller, aber es war das Gegenteil. Die 1300 Datensätze wurden in 0 Millisekunden von LINQ verarbeitet und mit PLINQ mit 10 Millisekunden. Natürlich beim zweiten anlauf waren die ergebnisse von PLINQ besser.

Es ist natürlich klar, parallel Daten abzuarbeiten lohnt sich nur dann wenn es genug viele Daten da sind, sonst verbraucht man unnötig wartezeiten für die Parallelisierung bei weniger Datensätzen.

Also meine Frage wäre, ab wann würde sich PLINQ lohnen? also ab 1000 Datensätzen ist die Qualität sehr schlecht. Ich denke nicht das 10.000 Datensätze es besser mit PLINQ haben. Habe leider keinen Beispiel für aber ich habe einen Artikel über die Berechnung von Genome mit PLINQ gelesen (Eigentlich zufälliges Genome Generierung) und der Typ meinte mit PLINQ hats man einfacher.
 
@rooker002

ja Plinq macht Sinn. Wenn du wirklich Benchmarken willst, dann fang mit mindestens 10.000 Datensätzen an und lass das ganze 10 mal hintereinander laufen und nimm den Durchschnitt. Darunter macht das keinen Sinn, weils einfach viel zu schnell geht und das Ergebnis von anderen Faktoren (z.B. kurzzeitige CPU-Peaks/HDD Zugriff durch andere Programme beeinflusst wird). Gleichzeitig solltest du auf eine GUI Anzeige verzichten und für die Ausgabe lediglich die Console benutzen.

Damit LINQ-Abfragen ausgeführt werden, muss du nicht nur die Ausfrage ausführen sondern durch das Resultset mit ner Schleife durchparsen.

zB.:

var result = from user in dc.Users
select user;

löst keine LINQ-Abfrage aus, wird oft gern vergessen, daher:

var result = from user in dc.Users
select user;

int id;

foreach(User user in result)
{
id = user.ID;
}

Und dann noch mit Stopwatch arbeiten, ist genauer als mit Ticks oder TimeSpan oder ähnliches
 
hab vor ner woche ne ganz kurze arbeit dazu abgegeben..da sind auch benches von linq und plinq drin..kann ich dir gerne zukommen lassen, wenn du interesse hast =)

ab ca 7000 einträgen is plinq mit foreach schneller...mit kleinerem datensatz lieber sequentiell arbeiten =)
 
Ab wann sich Parallelisierung lohnt hängt auch immer von den Daten und der durchzuführenden Operation ab. Es ist ein unterschied ob du 1 Mio. Integer oder 1 Mio. Strings mit je 1000 Zeichen sortierst.
Außerdem sollten alle Daten im Arbeitsspeicher gehalten werden können. Sobald du zwischendurch auf die Festplatte musst, ist der Performancevorteil in der Regel dahin, da Festplatten (und selbst SSDs) im Vergleich zu modernen CPUs unendlich langsam sind.
 
Zurück
Oben