Здравствуйте. Есть следующий код, который загружает файл со словами в массив, допустим, содержание файла такое:
Привет
Пока
Магазин
Телефон
Монитор
.... // и т.д. Очень много слов
Нужно сделать потоки для этого кода. Я пока не разобрался, как.
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#. Помогите, пожалуйста.
Ответ
Вы запускаете на каждую итерацию цикла новый поток. Вот и получается 50 потоков. Используйте готовый мультипотоковый цикл. Parallel.For(0, length, i => { // Тело цикла. }); подробней о Parallel.For Или разделите цикл на N частей по длине и в каждой создайте поток. Получите N-поточный цикл.
Комментариев нет:
Отправить комментарий