Windows Powershell ― % 

.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個ずつ文字列をメモリーに読み込み、処理に渡し、捨ててくれる。


[2008/11/17 18:26] Windows Powershell | TB(0) | CM(0)

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://reviva.blog1.fc2.com/tb.php/1188-88516358