Ich arbeite mit einigen Multi-Gigabyte-Textdateien und möchte sie mit PowerShell als Stream verarbeiten. Es ist einfaches Zeug, nur Parsing jede Zeile und ziehen Sie einige Daten, dann speichern Sie es in einer Datenbank.
Leider, get-content | %{ whatever($_) }
scheint den gesamten Satz von Zeilen in diesem Stadium der Pipe im Speicher zu halten. Es ist auch erstaunlich langsam, da es sehr lange dauert, bis alles eingelesen ist.
Meine Frage besteht also aus zwei Teilen:
- Wie kann ich erreichen, dass der Stream Zeile für Zeile verarbeitet wird und nicht alles im Speicher gepuffert bleibt? Ich möchte vermeiden, dass mehrere Gigabyte RAM für diesen Zweck verbraucht werden.
- Wie kann ich es schneller laufen lassen? PowerShell iteriert über eine
get-content
scheint 100x langsamer zu sein als ein C#-Skript.
Ich hoffe, dass ich irgendetwas Dummes tue, zum Beispiel ein -LineBufferSize
Parameter oder so etwas...