|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
||||||
Многопоточная обработка мелких файлов24.06.2014, 21:42. Показов 3757. Ответов 29
Метки нет (Все метки)
Добрый день!
Программа через ThreadPool обрабатывает массив файлов:
Я заметил, что если программа обрабатывает крупные файлы (средним объемом 50 Мб), то скорость работы получается максимально высокой. Если программа обрабатывает мелкие файлы (по 1 Мб), то скорость обработки падает в несколько раз. Как считаете, можно ли как-то ускорить обработку мелких файлов, не меняя коренным образом программу? Добавлено через 1 минуту Я так понял, что основные затраты состоят в том, что: - на каждый файл создается отдельный поток; - в методе check() ведется некая подготовка для чтения файла - вывод результатов в DataGridView происходит чаще, если если обрабатывать крупные файлы. Добавлено через 38 минут В Parallel.ForEach есть такая штука встроенная "Partitioner". Она позволяет не создавать отдельный поток для каждого файла, а создавать один поток, а потом направлять в него некую "порцию" файлов. Таким образом, более эффективно распределяя нагрузку. Я, вот, думаю, можно ли для ThreadPool что-то подобное сделать. Добавлено через 7 минут Думаю, как бы в качестве объекта в строку ThreadPool.QueueUserWorkItem(new WaitCallback(Check), (object)file); передавать не один (object)file, а, скажем массив, состоящий из нескольких файлов общим объемом не менее 50 Мб. Если же какой-то файл сразу больше 50 Мб, то передавать только один файл в массиве.
0
|
||||||
| 24.06.2014, 21:42 | |
|
Ответы с готовыми решениями:
29
Многопоточная обработка Многопоточная обработка данных + ввод/вывод Скачивание множества мелких файлов |
|
9 / 9 / 5
Регистрация: 23.06.2014
Сообщений: 40
|
||
| 25.06.2014, 13:42 | ||
|
0
|
||
|
|
|
| 25.06.2014, 13:48 | |
|
Костылей куча, на 2.0 давненько ничего не делал, но общий смысл должен быть понятен.
Сделано с расчётом на возможность остановки как раз. Все Ваши обработки файлов в метод DoLongRunningJob надо положить. В него передаётся экземпляр класса Job, который содержит в себе как раз List<T>. Деление на списки происходит в методе DoWork, а первоначальный список методом PrepareData() формируется.
1
|
|
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
||
| 25.06.2014, 19:11 [ТС] | ||
|
Спасибо, попробую.
Добавлено через 2 часа 40 минут Добавлено через 2 часа 7 минут Spawn, в Вашем коде получается, что сообщение "Конец работы" появляется до того, как закончатся запущенные процессы.
0
|
||
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
||||||
| 26.06.2014, 09:21 [ТС] | ||||||
|
Еще не совсем понял, зачем нужен этот кусок кода:
0
|
||||||
|
|
||||||||||||
| 26.06.2014, 09:33 | ||||||||||||
|
Да, накосячил немного вчера, прошу прощения.
Изменённый метод DoLongRunningJob:
Изменённый обработчик Job_AllJobsFinished:
1
|
||||||||||||
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
| 26.06.2014, 10:03 [ТС] | |
|
Исправил код, как Вы написали, но что-то все равно "конец работы" впереди всех отображается. Да еще два раза.
0
|
|
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
| 26.06.2014, 10:10 [ТС] | |
|
Спасибо, я попробую перенести код на свою задачу, потом отпишусь.
0
|
|
|
2 / 2 / 1
Регистрация: 16.04.2013
Сообщений: 7
|
|
| 27.10.2014, 02:56 | |
|
Suppir,
Можешь скинуть код обработки текстовых файлов? Сам похожую задачу делаю на данный момент.
0
|
|
| 27.10.2014, 02:56 | |
|
Многопоточная обработка списка
Многопоточная обработка структур Многопоточная обработка файла c# многопоточная обработка транзакций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|