В настоящее время я работаю над исследовательским проектом, который включает в себя индексацию большого количества файлов (. ] 240k ); в основном это html, xml, doc, xls, zip, rar, pdf и текст с размерами файлов от нескольких КБ до более 100 МБ.
Со всеми распакованными файлами zip и rar я получаю окончательный итог в один миллион файлов.
Я использую Visual Studio 2010, C #и.NET 4.0 с поддержкой TPL Dataflow и Async CTP V3. Для извлечения текста из этих файлов я использую Apache Tika (, преобразованный с помощью ikvm ), и использую Lucene.net 2.9.4 в качестве индексатора. Я хотел бы использовать новую библиотеку потоков данных TPL и асинхронное программирование.
У меня есть несколько вопросов.:
Получу ли я преимущества в производительности, если буду использовать TPL? В основном это процесс ввода-вывода, и, насколько я понимаю, TPL не дает особых преимуществ, когда вы интенсивно используете ввод-вывод.
Будет ли подход «производитель/потребитель» лучшим способом справиться с этим типом обработки файлов, или есть другие модели, которые лучше? Я думал о создании одного производителя с несколькими потребителями, используя блокирующие коллекции.
Будет ли библиотека потоков данных TPL полезна для такого типа процессов? Кажется, TPL Dataflow лучше всего использовать в какой-нибудь системе обмена сообщениями...
Должен ли я использовать асинхронное программирование или придерживаться синхронного в этом случае?