Данный ответ не удовлетворяет меня, и, возможно, мой ответ поможет другим не думать, что это слишком сложно, или многопоточность не выиграет в таком сценарии. Возможно, это не ускорит передачу, но в зависимости от сложности вашего анализа это может ускорить анализ / или анализ проанализированных данных.
Это действительно зависит от деталей вашего анализа. Какую информацию вам нужно получить из файлов журнала? Эта информация похожа на статистику или зависит от нескольких сообщений журнала?
У вас есть несколько вариантов:
- Проанализировать несколько файлов одновременно было бы проще всего, я думаю, у вас есть файл в качестве контекста и вы можете создать один поток на файл
- другая опция, как упоминалось ранее, это использовать сжатие для связи по сети
- вы также можете использовать помощник, который разбивает файл журнала на строки, которые принадлежат друг другу в качестве первого шага, а затем с несколькими потоками обрабатывают эти блоки строк; Разбор этих зависимых строк должен быть достаточно простым и быстрым.
Очень важно в таком сценарии измерить фактическое узкое место. Если узким местом является сеть, вы не выиграете от чрезмерной оптимизации парсера. Если ваш парсер создает много объектов одного типа, вы можете использовать шаблон ObjectPool и создавать объекты с несколькими потоками. Попробуйте обработать ввод, не выделяя слишком много новых строк. Часто парсеры пишутся с использованием большого количества string.Split и так далее, это не так быстро, как могло бы быть. Вы можете перемещаться по потоку, проверяя поступающие значения, не читая всю строку и не разделяя ее снова, а непосредственно заполняя объекты, которые вам понадобятся после завершения анализа.
Оптимизация почти всегда возможна, вопрос в том, сколько вы получаете за то, какой вклад и насколько важен ваш сценарий.