.NETのCLR環境の困ったところは、速度よりもむしろ、メモリーを馬鹿食いするところだと個人的には感じている。Powershellでテキストファイルをメモリーに読み込ませると、ファイルの数倍のメモリーを使う。
$table =@{}
foreach($i in (type "list.txt")){
$c = $i
$c = ($c.split("第"))[0]
$a = $c.split(" ")
$c = [string]::Join(" ", $a[1..($a.count - 1)])
$table[$c] += 1
}
return $table
これ↑をやると、list.txtが100MBを超えたあたりで、HDDがページファイルの読み書きでうるさくなる。100MBのテキストファイルを読み込むと、Powershellのメモリー占有量は1GBくらいにまで膨らんでしまう。
$table = @{}
type "list.txt" | %{
$c = $_
$c = ($c.split("第"))[0]
$a = $c.split(" ")
$c = [string]::Join(" ", $a[1..($a.count - 1)])
$table[$c] += 1
}
return $table
これ↑なら大丈夫。foreach()と違って、%は1個ずつ文字列をメモリーに読み込み、処理に渡し、捨ててくれる。