Sto lavorando con alcuni file di testo multi-gigabyte e desidero eseguire l'elaborazione del flusso su di essi utilizzando PowerShell. È roba semplice, basta analizzare ogni riga ed estrarre alcuni dati, quindi archiviarli in un database.
Sfortunatamente, get-content | %{ whatever($_) }
sembra mantenere in memoria l'intero insieme di linee in questa fase del tubo. È anche sorprendentemente lento, impiegando molto tempo per leggerlo effettivamente tutto.
Quindi la mia domanda è composta da due parti:
- Come posso fare in modo che elabori lo stream riga per riga e non mantenga l'intera cosa memorizzata nel buffer? Vorrei evitare di utilizzare diversi giga di RAM per questo scopo.
- Come posso farlo funzionare più velocemente? L'iterazione di PowerShell su un
get-content
sembra essere 100 volte più lenta di uno script C #.
Spero che ci sia qualcosa di stupido che sto facendo qui, come perdere un -LineBufferSize
parametro o qualcosa del genere ...
get-content
, impostare -ReadCount su 512. Notare che a questo punto $ _ in Foreach sarà un array di stringhe.