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