Распределение многомиллионного массива между поткоами - 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 =>
{
//делаем нужное с каждым элементом
});