Pracuję z kilkoma wielobajtowymi plikami tekstowymi i chcę wykonać na nich przetwarzanie strumienia za pomocą PowerShell. To proste rzeczy, po prostu analizowanie każdej linii i wyciąganie niektórych danych, a następnie zapisywanie ich w bazie danych.Jak przetwarzać plik w PowerShell wiersz po wierszu jako strumień
Niestety, get-content | %{ whatever($_) }
wydaje się przechowywać cały zestaw linii na tym etapie rury w pamięci. Jest to także zaskakująco wolno, robiąc bardzo dużo czasu, aby rzeczywiście przeczytać wszystko w
Więc moje pytanie jest na dwie części:.
- W jaki sposób można uczynić go przetworzyć linii strumienia przez linię i nie trzymać całej karty rzecz buforowana w pamięci? W tym celu chciałbym uniknąć wykorzystania kilku pamięci RAM.
- Jak sprawić, by działał szybciej? PowerShell iterujący po numerze
get-content
wydaje się być 100 razy wolniejszy niż skrypt C#.
Mam nadzieję, że coś jest głupie tu robię, jak brakuje parametru -LineBufferSize
czy coś ...
Aby przyspieszyć 'get-content' up, ustaw -ReadCount na 512. Zauważ, że w tym momencie $ _ w Foreach będzie tablicą ciągów. –
Mimo to, skorzystałbym z sugestii Romana użycia czytnika .NET - znacznie szybciej. –
Z ciekawości, co się dzieje, gdy nie zależy mi na prędkości, ale na pamięci? Najprawdopodobniej pójdę z sugestią czytelnika .NET, ale jestem też zainteresowany tym, jak powstrzymać go od buforowania całej rury w pamięci. – scobi