Ich habe eine große Liste (1.500.000 Artikel), mit jedem Gegenstand muss ich einen sehr kleinen Scheck machen. Totally während 30 Sekunden.
Die CPU-Auslastung bei der Verwendung von Sequential beträgt ca. 10%, daher werden viele Ressourcen nicht verwendet.
Der erste Gedanke war, Parallel zu verwenden, aber aufgrund der begrenzten Zeitdauer für jeden Gegenstand dauert Parallel länger als ein sequentieller Foreach, weil " Warum war die parallele Version langsamer als die sequentielle Version in diesem Beispiel? ", die erklärt, dass die Erstellung jeder Aufgabe Zeit kostet.
Also hatte ich einen anderen Gedanken und das ist, die Liste in 4 (oder mehr) gleiche Teile zu teilen und einen Thread zu erstellen, um die Elemente durchzulaufen, um sie schneller zu bekommen.
Bevor ich meine eigene Klasse erstelle, ist das ein guter Ansatz? Oder irgendwelche anderen Gedanken, wie man die Dinge beschleunigen kann? Oder weißt du einen besseren Weg, damit umzugehen?
Der Code, den ich für einen anderen parallelen Ansatz erstellt habe: (verwendet in meiner eigenen statischen Klasse)
%Vor%Anmerkung: "rest" Variable, um die letzten Elemente auszuführen, wird in diesem Beispiel derzeit nicht verwendet.
Lösung unten, weitere Informationen: Ссылка
Ja, die Partitionierung des Eingangsarrays ist ein guter Ansatz.
Tatsächlich bietet Microsoft eine Klasse Partitioner
, die genau diesen Ansatz unterstützt.
Hier ist ein Beispiel, wie es gemacht wird:
%Vor%Tags und Links optimization c# parallel-processing sequential