我一直在比较在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
Run Code Online (Sandbox Code Playgroud)
它产生(当然略有变化)以下输出:
StreamReader time: + 00:00:00.5493247
Get-Content time: + 00:00:07.8424864
System.IO.File reader time: + 00:00:00.7988032
Run Code Online (Sandbox Code Playgroud)
所以这似乎[System.IO.StreamReader]
是“读取”文件最快的方法。
我的问题是:
假如说
[System.IO.File]::OpenText($file)
$content = $reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)
相当于(因为它们都打开文件流):
$reader = New-Object System.IO.StreamReader($file)
$content = $reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)
那么是什么让一个比另一个稍微快一点呢?运行大约 10 次,似乎[System.IO.StreamReader]
总是快约 0.2 秒。
来源
归档时间: |
|
查看次数: |
10235 次 |
最近记录: |