如果您真的要处理千兆字节的文本文件,请不要使用PowerShell。即使您找到一种读取它的方法,在PowerShell中无论如何,处理大量的行还是很慢的,您也无法避免这种情况。即使是简单的循环也很昂贵,例如,对于1000万次迭代(在您的情况下非常真实),我们有:
measure-command { for($i=0; $i -lt 10000000; ++$i) {} }
measure-command { for($i=0; $i -lt 10000000; ++$i) { $i } }
measure-command { for($i=0; $i -lt 10000000; ++$i) { $i.ToString() -match '1' } }
更新:如果您仍然不害怕,请尝试使用.NET阅读器:
$reader = [System.IO.File]::OpenText("my.log")
try {
for() {
$line = $reader.ReadLine()
if ($line -eq $null) { break }
$line
}
}
finally {
$reader.Close()
}
更新2
有关于更好/更短代码的注释。原始代码没有问题,for
它也不是伪代码。但是阅读循环的较短(最短?)变体是
$reader = [System.IO.File]::OpenText("my.log")
while($null -ne ($line = $reader.ReadLine())) {
$line
}
get-content
,请将-ReadCount设置为512。请注意,此时,Foreach中的$ _将是一个字符串数组。