Pracuję z kilkoma wielogigabajtowymi plikami tekstowymi i chcę wykonać na nich przetwarzanie strumieniowe za pomocą PowerShell. To proste, wystarczy przeanalizować każdą linię i wyciągnąć trochę danych, a następnie zapisać je w bazie danych.
Niestety, get-content | %{ whatever($_) }
wydaje się, że cały zestaw linii na tym etapie rury jest w pamięci. Jest również zaskakująco wolny, a jego przeczytanie zajmuje bardzo dużo czasu.
Więc moje pytanie składa się z dwóch części:
- Jak sprawić, by przetwarzał strumień linia po linii i nie przechowywał całej rzeczy w pamięci? Chciałbym uniknąć zużywania w tym celu kilku gigabajtów pamięci RAM.
- Jak mogę sprawić, by działał szybciej? Iteracja programu PowerShell po a
get-content
wydaje się być 100 razy wolniejsza niż skrypt C #.
Mam nadzieję, że robię tu coś głupiego, na przykład brak -LineBufferSize
parametru lub coś ...
get-content
, ustaw -ReadCount na 512. Zauważ, że w tym momencie $ _ w Foreach będzie tablicą ciągów.