[prg] Равзвести цикл на потоки
Привет уважаемому собранию.
C#, VS2017.
Есть большая текстовая база. Ищу в ней циклом:
string line;
while ((line = reader.ReadLine()) != null)
{
if (line.Contains(textBox1.Text) == true)
listBox1.Items.Add(line);
}
Как видно из нагрузки на процессор, поиск идёт на единственном ядре.
Можно как-то распределить эту задачу равномерно по всем ядрам/потокам?
Ядер у меня 6, потоков 12.
Vande omentaina, Кирилл!
Я бы на вашем месте использовал Parallel.ForEach в сочетании с
ReadLines.
Дока с похожим примером:
https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-foreach-loop
В вашем случае лямбдочка должна выглядеть как-то так:
// WARNING! Untested code, use only for reference!
Parallel.ForEach(reader, (line => {
if (line.Contains(textBox1.Text))
listBox1.Items.Add(line);
}
});