Saya bekerja dengan beberapa file teks multi-gigabyte dan ingin melakukan pemrosesan streaming menggunakan PowerShell. Ini hal sederhana, hanya mengurai setiap baris dan menarik beberapa data, lalu menyimpannya dalam database.
Sayangnya, get-content | %{ whatever($_) }
tampaknya menyimpan seluruh rangkaian garis pada tahap pipa ini dalam memori. Ini juga sangat lambat, membutuhkan waktu yang sangat lama untuk benar-benar membaca semuanya.
Jadi pertanyaan saya ada dua bagian:
- Bagaimana cara membuatnya memproses baris demi baris dan tidak menyimpan semuanya dalam buffer di memori? Saya ingin menghindari penggunaan beberapa gigs RAM untuk tujuan ini.
- Bagaimana cara membuatnya berjalan lebih cepat? PowerShell yang melakukan iterasi pada a
get-content
tampaknya 100x lebih lambat daripada skrip C #.
Saya berharap ada sesuatu yang bodoh yang saya lakukan di sini, seperti melewatkan -LineBufferSize
parameter atau sesuatu ...
get-content
, set -ReadCount ke 512. Perhatikan bahwa pada titik ini, $ _ di Foreach akan menjadi sebuah array string.