System.IO.StreamReader与Get-Content vs. System.IO.File

时间:2017-06-09 16:22:27

标签: .net powershell

我一直在比较各种方法,以便在Powershell中快速阅读相对较大的文本文档。这些文件的范围从50kb到200mb。我需要快速解析它们的特定行和/或特定字符串。

读取文件的三个常用工具(我所知道的,并且没有构建我自己的C#库)是:System.IO.StreamReader,System.IO.File和Powershell Cmdlet Get-Content。

所以我写了一个快速的小比较脚本:

$file = Get-Childitem -path "MyLogFile.txt" #This is a 100mb txt file

$t1 = Measure-Command{
    $reader = New-Object System.IO.StreamReader($file)
    $content = $reader.ReadToEnd()
    $reader.Close()
}
Write-host "StreamReader time: " + $t1

$t2 = Measure-Command{
    Get-Content $file 
}
Write-host "Get-Content time: " + $t2

$t3 = Measure-Command {
    $reader = [System.IO.File]::OpenText($file)
    $content = $reader.ReadToEnd()
    $reader.Close()
}
Write-Host "System.IO.File reader time: " + $t3

产生以下输出(当然略有变化):

StreamReader time:  + 00:00:00.5493247
Get-Content time:  + 00:00:07.8424864
System.IO.File reader time:  + 00:00:00.7988032

所以[System.IO.StreamReader]似乎是“读取”文件的最快方式。

我的问题是:

假设

[System.IO.File]::OpenText($file)
$content = $reader.ReadToEnd()

等效(因为它们都打开文件流)为:

$reader = New-Object System.IO.StreamReader($file)
$content = $reader.ReadToEnd()

然后是什么让一个比另一个稍快?运行大约10次,似乎[System.IO.StreamReader]总是快0.2秒。

来源

0 个答案:

没有答案