While-Schleife auf allen Kernen nutzen
-
Hi,
ist es möglich die folgende while-Schleife so umzubauen, dass die "maximale" CPU-Leistung ausgereizt werden kann? Wenn ja, was muss ich tun?
while (Worksheet.Cells[iZeile, "A"].Value != null) { ListViewItem Neue_Zeile = new ListViewItem(Convert.ToString(iZeile)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "A"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "B"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "C"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "D"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "E"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "F"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "G"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "H"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "J"].Value)); Neue_Zeile.SubItems.Add(Convert.ToString(Worksheet.Cells[iZeile, "L"].Value)); ListView_Liste.Items.Add(Neue_Zeile); iZeile++; }Besten Dank im Voraus?
-
Dafür gibt es die Task Parallel Library (TPL).
Du müßtest diewhile-Schleife jedoch in eineforbzw.foreachumwandeln und dannParallel.Forbzw.Parallel.ForEachaufrufen.
Da du die Daten jedoch in eine neue Liste überführen möchtest, mußt du dies wieder threadsicher synchronisieren (was auch wieder Rechenzeit kostet).
-
@Th69 sagte in While-Schleife auf allen Kernen nutzen:
Da du die Daten jedoch in eine neue Liste überführen möchtest, mußt du dies wieder threadsicher synchronisieren (was auch wieder Rechenzeit kostet).
Nicht nur das, man muss auch "partition-local variables" verwenden - zumindest wenn man es mit
Parallel.ForEachmachen möchte. Und das ist dann auch nicht so trivial.
-
Glaube ich nicht, sieht so aus als wenn du bestenfalls 100% Speicherbandbreite ausnutzen könntest. Hab aber nicht komplett verstanden, was das sein soll.