Sto lavorando con alcuni file di testo multi-gigabyte e voglio eseguire l'elaborazione in streaming su di essi utilizzando PowerShell. È roba semplice, basta analizzare ogni riga e tirare fuori alcuni dati, quindi archiviarli in un database.Come elaborare un file in PowerShell line-by-line come stream
Sfortunatamente, get-content | %{ whatever($_) }
sembra mantenere l'intero set di linee in questa fase della pipe in memoria. E 'anche sorprendentemente lenta, prendendo un tempo molto lungo per leggere davvero tutto in
Quindi la mia domanda è di due parti:.
- Come posso farlo elaborare la linea di flusso per riga e non mantenere l'intero cosa ha bufferizzato nella memoria? Vorrei evitare di utilizzare diversi concerti di RAM per questo scopo.
- Come posso farlo funzionare più velocemente? PowerShell che itera su un
get-content
sembra essere 100 volte più lento di uno script C#.
spero ci sia qualcosa di stupido che sto facendo qui, come manca un parametro -LineBufferSize
o qualcosa del genere ...
Per velocizzare 'get-content', impostare -ReadCount su 512. Si noti che a questo punto $ _ nel Foreach sarà un array di stringhe. –
Ancora, vorrei andare con il suggerimento di Romano di utilizzare il lettore .NET - molto più veloce. –
Per curiosità, cosa succede se non mi interessa la velocità, ma solo la memoria? Molto probabilmente andrò con il suggerimento del lettore .NET, ma sono anche interessato a sapere come impedirlo dal buffering dell'intero pipe in memoria. – scobi