Распределение многомиллионного массива между поткоами - C#
Формулировка задачи:
Привет всем. Подскажите как решить следующую задачу: на входе я из текстового файла считываю строки в список List
После чего в программе запускаются потоки и необходимо каждому их них выделить поровну строк из изначального списка. Тоесть если в спике было 1 000 000 строк, а потоков у нас 100 то на каждый приходится по 10 000 строк. Это если отношение потоков к строкам кратно, а если нет то необходимо чтоб некоторые потоки получили больше строк чем другие.
Думал попробовать таким кодом это сделать:
Но даже когда 1 миллион строк то прога несколько минут работает, очень медленно получается. Подскажите, как можно оптимально выполнить мою задачу?
StreamReader str = new StreamReader("file.txt"); string buf = str.ReadToEnd(); str.Close(); string[] buf_mas = buf.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < buf_mas.Length; i++) List1.Add(buf_mas[i]);
while(true) lock (Locker1) { if (List1.Count() < ThreadNumber) { if (List1.Count() == 0) break; List2.Add(List1[0]); List1.RemoveAt(0); } else for (int i = 0; i < List1.Count() / ThreadNumber; i++) { if (List1.Count() == 0) break; List2.Add(List1[0]); List1.RemoveAt(0); } }
Решение задачи: «Распределение многомиллионного массива между поткоами»
textual
Листинг программы
using System.Threading.Tasks; List<string> list = new List<string>(); Parallel.ForEach(list, item => { //делаем нужное с каждым элементом });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д