Estou trabalhando com alguns arquivos de texto de vários gigabytes e quero fazer algum processamento de stream neles usando o PowerShell. É uma coisa simples, apenas analisar cada linha e extrair alguns dados, em seguida, armazená-los em um banco de dados.
Infelizmente, get-content | %{ whatever($_) }
parece manter todo o conjunto de linhas neste estágio do tubo na memória. Também é surpreendentemente lento, levando muito tempo para realmente ler tudo.
Portanto, minha pergunta tem duas partes:
- Como posso fazer com que ele processe o fluxo linha por linha e não mantenha tudo armazenado na memória? Eu gostaria de evitar o uso de vários GB de RAM para essa finalidade.
- Como posso fazê-lo funcionar mais rápido? A iteração do PowerShell em um
get-content
parece ser 100x mais lenta do que um script C #.
Espero que haja algo estúpido que estou fazendo aqui, como perder um -LineBufferSize
parâmetro ou algo assim ...
get-content
, defina -ReadCount como 512. Observe que, neste ponto, $ _ no Foreach será uma matriz de strings.