Многопоточная обработка мелких файлов - C#

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

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

Добрый день! Программа через ThreadPool обрабатывает массив файлов:
Листинг программы
  1. foreach (string file in Files)
  2. {
  3. ThreadPool.QueueUserWorkItem(new WaitCallback(Check), (object)file);
  4. }
Метод Check() читает файл, делает различные проверки, в конце - пишет результаты в таблицу. Я заметил, что если программа обрабатывает крупные файлы (средним объемом 50 Мб), то скорость работы получается максимально высокой. Если программа обрабатывает мелкие файлы (по 1 Мб), то скорость обработки падает в несколько раз. Как считаете, можно ли как-то ускорить обработку мелких файлов, не меняя коренным образом программу?
Я так понял, что основные затраты состоят в том, что: - на каждый файл создается отдельный поток; - в методе check() ведется некая подготовка для чтения файла - вывод результатов в DataGridView происходит чаще, если если обрабатывать крупные файлы.
В Parallel.ForEach есть такая штука встроенная "Partitioner". Она позволяет не создавать отдельный поток для каждого файла, а создавать один поток, а потом направлять в него некую "порцию" файлов. Таким образом, более эффективно распределяя нагрузку. Я, вот, думаю, можно ли для ThreadPool что-то подобное сделать.
Думаю, как бы в качестве объекта в строку ThreadPool.QueueUserWorkItem(new WaitCallback(Check), (object)file); передавать не один (object)file, а, скажем массив, состоящий из нескольких файлов общим объемом не менее 50 Мб. Если же какой-то файл сразу больше 50 Мб, то передавать только один файл в массиве.

Решение задачи: «Многопоточная обработка мелких файлов»

textual
Листинг программы
  1. ThreadPool.QueueUserWorkItem(new WaitCallback(Check), (object)sb);
  2.             Thread.Sleep(10);

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


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

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы