Come elaborare un file in PowerShell line-by-line come stream

Sto lavorando con alcuni file di testo multi-gigabyte e voglio fare qualche elaborazione in streaming su di essi usando PowerShell. È roba semplice, basta analizzare ogni riga e tirare fuori alcuni dati, quindi archiviarli in un database.

Sfortunatamente, get-content | %{ whatever($_) } get-content | %{ whatever($_) } sembra mantenere l’intero set di linee in questa fase della pipe in memoria. È anche sorprendentemente lento, impiegando molto tempo per leggerlo tutto dentro.

Quindi la mia domanda è in due parti:

  1. Come posso far elaborare lo stream riga per riga e non tenere tutto il buffer in memoria? Vorrei evitare di utilizzare diversi concerti di RAM per questo scopo.
  2. Come posso farlo funzionare più velocemente? PowerShell che itera su un get-content sembra essere 100 volte più lento di uno script C #.

Spero che ci sia qualcosa di stupido che sto facendo qui, come la mancanza di un parametro -LineBufferSize o qualcosa del genere …