Самый быстрый способ обработки большого количества файлов с тысячами данных в каждом файле - PullRequest
1 голос
/ 01 марта 2012

Мне нужно обработать данные из какого-то большого количества файлов с тысячами данных в терминах строк. Раньше я читал весь файл по строкам и обрабатывал их. Это заняло много времени для обработки всего файла, когда число файлов увеличилось. Тогда кто-то сказал, что потоки можно использовать для выполнения задачи за меньшее время ?? Может ли многопоточность сделать этот процесс быстрым? Я использую язык c #.

Ответы [ 5 ]

1 голос
/ 01 марта 2012

Я бы порекомендовал вам сделать пакетную вставку в вашу базу данных.

У вас может быть поток, который читает строку в параллельную очередь. в то время как другой поток извлекает данные из параллельной очереди. если это необходимо, или если вы выполняете какие-либо операции с ним. затем пакетно вставить данные в базу данных. это сэкономит вам немало времени.

Вставка строки в БД будет очень медленной. Вы должны сделать пакетные вставки.

1 голос
/ 01 марта 2012

Конечно, может, хотя зависит от конкретной работы. Очень распространенный шаблон - один поток выполняет файловый ввод-вывод, а несколько потоков - фактические строки.

Сколько потоков обработки для запуска будет зависеть от того, сколько процессоров / ядер у вас есть в вашей системе, и как будут записаны результаты обработки. Однако, если время обработки на строку очень мало, вы, вероятно, не добьетесь слишком большого улучшения скорости, имея несколько потоков обработки и один поток обработки будет оптимальным.

0 голосов
/ 01 марта 2012

Хорошая вещь в вопросе производительности - это предположить, что ваш код просто делает что-то ненужное, и попытаться выяснить, что это такое - измерить, просмотреть, нарисовать - все, что работает для вас. Я не говорю, что код у вас медленный , это просто способ посмотреть на него.

При первом добавлении многопоточности в микшер вам может оказаться намного сложнее анализировать код.

Более конкретно для вашей задачи: объединение нескольких похожих операций (например, чтение записи из файла или фиксация в БД) вместе может сэкономить значительное количество времени (вам нужно создать прототип и измерить).

0 голосов
/ 01 марта 2012

Потоки - это один из способов (есть и другие), позволяющий перекрывать обработку с вводом / выводом.Это означает, что вместо общего времени, являющегося суммой времени на чтение данных и времени на обработку данных, вы можете уменьшить его до (примерно) любого из двух значений (обычно времени ввода-вывода).

Если вы в основном хотите перекрывать время ввода / вывода, вы можете посмотреть на перекрывающиеся порты завершения ввода / вывода и / или ввода / вывода.

Редактировать: если вы собираетесь делатьдля этого обычно требуется, чтобы количество потоков ввода-вывода основывалось на количестве отдельных физических дисков, с которых вы собираетесь выполнять чтение, а количество потоков обработки - на количестве процессоров, которые у вас есть для обработки (нотолько столько, сколько необходимо, чтобы идти в ногу с данными, предоставляемыми потоком читателя).Для типичного настольного компьютера это часто означает только два потока: один для чтения и один для обработки данных.

0 голосов
/ 01 марта 2012

Да, использование потоков может ускорить процесс.
Потоки должны использоваться, когда у вас есть время на выполнение задач, которые вы можете запускать в фоновом режиме (например, когда вы обрабатываете, скажем, 10 файлов, но вам нужен только один, вы можете иметь поток, обрабатывающий каждый из них, который будет намного быстрее, чем обрабатывать их). все в вашей основной ветке).

Пожалуйста, обратите внимание, что могут быть ошибки, связанные с этим, поэтому вы должны убедиться, что все потоки закончили работать, прежде чем продолжить и пытаться получить доступ к тому, что получили.

Посмотрите "C # .NET многопоточность" любой поток может запустить указанную функцию, и фоновый работник также является хорошим классом (хотя я предпочитаю чистую многопоточность).

Также обратите внимание, что это может иметь неприятные последствия и замедляться, но это хорошая идея, чтобы попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...