Распределение многомиллионного массива между поткоами - C#

Узнай цену своей работы

Формулировка задачи:

Привет всем. Подскажите как решить следующую задачу: на входе я из текстового файла считываю строки в список List
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]);
После чего в программе запускаются потоки и необходимо каждому их них выделить поровну строк из изначального списка. Тоесть если в спике было 1 000 000 строк, а потоков у нас 100 то на каждый приходится по 10 000 строк. Это если отношение потоков к строкам кратно, а если нет то необходимо чтоб некоторые потоки получили больше строк чем другие. Думал попробовать таким кодом это сделать:
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);
                    }  
                }
Но даже когда 1 миллион строк то прога несколько минут работает, очень медленно получается. Подскажите, как можно оптимально выполнить мою задачу?

Решение задачи: «Распределение многомиллионного массива между поткоами»

textual
Листинг программы
using System.Threading.Tasks;
 
List<string> list = new List<string>();
Parallel.ForEach(list, item =>
            {
                //делаем нужное с каждым элементом
            });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы