Bazı çok gigabaytlık metin dosyalarıyla çalışıyorum ve PowerShell'i kullanarak bunlarda bazı akış işlemleri yapmak istiyorum. Basit şeyler, sadece her satırı ayrıştırmak ve bazı verileri çıkarmak ve ardından bir veritabanında depolamak.
Ne yazık ki, get-content | %{ whatever($_) }
borunun bu aşamasında tüm satır kümesini bellekte tutuyor gibi görünüyor. Aynı zamanda şaşırtıcı derecede yavaştır, aslında hepsini okumak çok uzun zaman alır.
Yani sorum iki bölümden oluşuyor:
- Akımı satır satır işlemesini ve her şeyi hafızada tutmamasını nasıl sağlayabilirim? Bu amaçla birkaç GB RAM kullanmaktan kaçınmak istiyorum.
- Daha hızlı çalışmasını nasıl sağlayabilirim? Bir üzerinde yinelenen PowerShell
get-content
, bir C # betiğinden 100 kat daha yavaş görünüyor.
Umarım burada yaptığım aptalca bir şey vardır, bir -LineBufferSize
parametreyi kaçırmak gibi ...
get-content
yukarı, bu noktada, foreachta $ _ dizelerden oluşan bir dizi olacağını 512. Not -ReadCount ayarlayın.