我一直在比较在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 秒。
Sources
- MSDN - System.IO.file.OpenText https://msdn.microsoft.com/en-us/library/system.io.file.opentext(v=vs.110).aspx
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)