#c_sharp #многопоточность #потоки_данных
Здравствуйте. Есть следующий код, который загружает файл со словами в массив, допустим, содержание файла такое: Привет Пока Магазин Телефон Монитор .... // и т.д. Очень много слов Нужно сделать потоки для этого кода. Я пока не разобрался, как. class Test { static string Text; static string[] ReadFile; static int Threads; static void Main() { Console.Write("Введите слово которое необходимо проверить: "); Text = Console.ReadLine(); Console.Write("Введите количество потоков: "); Threads = Convert.ToInt32(Console.ReadLine()); ReadFile = System.IO.File.ReadAllLines("slova.txt"); for (int i = 0; i < Threads; i++) // ну типо потоки запускаем { (new Thread(new ThreadStart(Slova))).Start(); } } static void Slova() { for (int i = 0; i < ReadFile.Length; i++) { if (ReadFile[i] == Text) { Console.Write("Слово " + Text + " успешно найдено в файле " + ReadFile); } } } } Дело в том, что этот код находит строку в файле и сверяет её с переменной Text столько раз, сколько установлено потоков, то есть если потоков 50, то он возьмет первую строку из файла и проверит её 50 раз, далее вторую и так далее, и сообщение о нахождении строки тоже 50 раз. Можно сделать в место for foreach (string textline in ReadFile) { .. } // тоже самое будет Как это исправить? Чтобы потоки хорошо работали. Я не очень разбираюсь в C#. Помогите, пожалуйста.
Ответы
Ответ 1
Вы запускаете на каждую итерацию цикла новый поток. Вот и получается 50 потоков. Используйте готовый мультипотоковый цикл. Parallel.For(0, length, i => { // Тело цикла. }); подробней о Parallel.For Или разделите цикл на N частей по длине и в каждой создайте поток. Получите N-поточный цикл.Ответ 2
Можно использовать PLINQ. Удобная вещь особенно для многопоточной обработки данных. Вот еще одна интересная статья пэтой теме.
Комментариев нет:
Отправить комментарий