SORU
16 Kasım 2010, Salı


Nasıl bir dosyayı işlemek için bir stream olarak PowerShell içinde satır satır

Çok gigabyte bazı metin dosyaları ile çalışıyorum ve bir dizi işlem yapmak için Active Directory istiyorum. Basit şeyler, sadece her satırı ayrıştırma ve bazı verileri çekip, sonra bir veritabanında saklanması.

Ne yazık ki, get-content | %{ whatever($_) } bellek borunun bu aşamada çizgiler kümesinin tamamını tutmak için görünür. Ayrıca şaşırtıcı derecede yavaş, çok uzun bir zaman aslında hepsini okumak için alıyor.

Benim sorum iki bölümden:

  1. Nasıl akışı satır satır işlem ve tamamını bellekte tutmak değil tamponlu yapabilir miyim? Bu amaçla RAM birkaç konser kullanarak önlemek istiyorum.
  2. Nasıl daha hızlı çalışır hale getirebilirim? PowerShell get-content 100 katına görünüyor bir yineleme içinde yavaş bir C# script.

Burada bir şeyler yapıyorum salak var, -LineBufferSize bir parametre ya da bir şey eksik gibi umuyorum...

CEVAP
16 Kasım 2010, Salı


Eğer gerçekten çok gigabyte üzerinde çalışmak üzere eğer metin dosyaları daha sonra PowerShell kullanmayın. Eğer okumak için daha hızlı bir yol bulsan bile çizgileri büyük miktarda işleme powershell'de zaten yavaş olacak ve bunu önlemek. Hatta basit döngüler pahalı, biz 10 milyon yineleme (sizin durumunuzda oldukça Gerçek) için söylüyor

# "empty" loop: takes 10 seconds
measure-command { for($i=0; $i -lt 10000000;   $i) {} }

# "simple" job, just output: takes 20 seconds
measure-command { for($i=0; $i -lt 10000000;   $i) { $i } }

# "more real job": 107 seconds
measure-command { for($i=0; $i -lt 10000000;   $i) { $i.ToString() -match '1' } }

GÜNCELLEME:Eğer hala korkuyorsan değil, o zaman kullanmayı deneyin .NET okuyucu:

$reader = [System.IO.File]::OpenText("my.log")
try {
    for(;;) {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }
        # process the line
        $line
    }
}
finally {
    $reader.Close()
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3DS Max Tutorials

    3DS Max Tuto

    4 AĞUSTOS 2013
  • DetroitBORG

    DetroitBORG

    29 Temmuz 2008
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011