Я работаю с некоторыми текстовыми файлами размером несколько гигабайт и хочу обработать их потоком с помощью PowerShell. Это просто: нужно просто проанализировать каждую строку и извлечь некоторые данные, а затем сохранить их в базе данных.
К сожалению, get-content | %{ whatever($_) }
похоже, что на этом этапе конвейера в памяти сохраняется весь набор строк. К тому же это на удивление медленно, ведь на то, чтобы все это прочитать, уходит очень много времени.
Итак, мой вопрос состоит из двух частей:
- Как я могу заставить его обрабатывать поток построчно и не хранить все в буфере в памяти? Я бы не хотел использовать для этого несколько гигабайт оперативной памяти.
- Как заставить его работать быстрее? PowerShell, перебирающий a,
get-content
оказывается в 100 раз медленнее, чем сценарий C #.
Я надеюсь, что я здесь что-то делаю глупо, например, упустил -LineBufferSize
параметр или что-то в этом роде ...
get-content
установите -ReadCount равным 512. Обратите внимание, что на этом этапе $ _ в Foreach будет массивом строк.