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

2024-01-10

我一直在比较在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(使用前将#替换为@)

System.IO.StreamReader 与 Get-Content 与 System.IO.File 的相关文章

随机推荐

  • 一个简单的可重现示例,用于在 R 中的自定义函数中将参数传递给 data.table

    我已经用谷歌搜索这个答案几个小时了 很多人都问过类似的问题 但我没有找到足够简单的问题或直接的答案 这是我的方法 假设我想做一个简单的分组data table library data table mtcars data table mtc
  • Java:给定日期的迭代

    我在 Java 中有两个日期 Wed Jan 05 00 00 00 CET 2011 Sat Jan 15 23 59 59 CET 2011 现在我想迭代它们 这样我每天都可以做一个System out println 我在控制台上输入
  • 没有负值的 JSpinner

    我正在 Netbeans 中构建一个小型应用程序 我使用 JSpinner 组件来设置产品的数量 如何将微调器设置为仅取正值 Netbeans 内是否有我可以设置的选择或方法JSpinner EXTRA spinner setModel n
  • 如何在不再次拉取子存储库的情况下进行本地克隆?

    我经常使用 Mercurial 在本地存储我的上游克隆 然后在本地再次克隆以适应我的实际工作环境 cd clones hg clone ssh external repo example com some repo path foo cd
  • 无法在初始渲染中找到参考

    我刚刚在官方文档中读到 第一次渲染时没有调用 componentDidUpdate 我想这可能就是为什么我的这个组件第一次渲染时 dom 没有被定义 这是一个弹出模式 当需要编辑页面时会弹出 我还有其他方法可以解决这个问题吗 compone
  • 将文件移动到新目录的批处理命令

    我想编写一个批处理作业 执行时将抓取所有文件C Test Log文件夹并将它们移至新目录C Test 这个新目录的名称为 Backup 名称为 当前日期 因此 完成后 日志文件夹应该为空 所有文件现在都位于新文件夹中 我知道我必须使用MOV
  • Java:如何获取当前音频输入的频率?

    我想分析麦克风输入的当前频率 以使 LED 与播放的音乐同步 我知道如何从麦克风捕获声音 但我不知道 FFT 这是我在寻找获取频率的解决方案时经常看到的 我想测试一下某个频率的当前音量是否大于设定值 代码应该看起来像这样 if freque
  • 自动扩展 YAML 合并的工具?

    我正在寻找一种工具或流程 可以轻松获取包含锚点 别名和合并键的 YAML 文件 并扩展别名并合并到平面 YAML 文件中 仍有许多常用的 YAML 解析不完全支持合并 我希望能够利用合并来保持干燥 但在某些情况下 需要将其构建到更详细的 平
  • 破损的日食可以修复吗?

    几天后 我不能再使用 Ctrl S 等键盘快捷键 因为它会在我的源代码中插入特殊字符 在属性文件中 我注意到 Ctrl S 插入了 u2308 有没有办法修复此问题 而无需重新安装 STS 2 8 1 您可以尝试使用以下命令从命令行启动 E
  • 如何使用授权和客户端 ID 在 C# 中调用 Azure Maps API?

    我正在尝试使用Azure 地图 API使用坐标搜索某个点周围的 POI 但我不知道如何通过添加以下内容来调用 API授权 and 客户端 ID 这是我在 Microsoft 文档网站上尝试该 API 时收到的请求预览 GET https a
  • 续集“findbyid”不是一个函数,但显然“findAll”是

    我遇到了一个非常奇怪的问题 当我尝试调用函数 findAll 时 它工作正常 创建和销毁相同 但是当我尝试调用函数 findById 时 它会抛出 findById 不是函数 与 FindOne 相同 works fine var gamm
  • model.save_weights 是否包含优化器状态?

    如果是 那么他们是如何做到的 我的意思是 假设我有一个通过子类化定制的模型 我的优化器是一个单独的对象 一个命令如何保存两个不同物体的权重 特别是 它如何知道这两个对象是相关的 是由于 model compile 完成的魔法吗 编辑 我刚刚
  • Laravel 图像提交按钮

    我想知道是否有一种方法可以自定义提交按钮的外观 改为图像 拉拉维尔 3 http three laravel com docs 目前 我的提交按钮代码如下所示 Form open project delete DELETE Form hid
  • 在逻辑或可视树中查找工具提示弹出窗口

    说我有一个ToolTip使用 XAML 中指定的样式 如下所示
  • 使用 as.numeric(levels(f))[f] 将数据框中的因子子集转换为数字

    我有一个包含 100 个变量的数据框 我想要将其中的一个子集 例如 dataframename 30 50 转换为它们的原始数值 1 2 3 4 5 我知道我应该使用as numeric levels f f 当我转换一个因子时 但只有当我
  • 如何将一个目录中的所有文件重定向到另一个目录?

    我已将服务器上的文件移至新目录 并希望将所有请求 301 重定向到新目录中的文件 假设我有 域名 com test apples php 域名 com test oranges php 域名 com test bananas php 我如何
  • JavaScript setTimeout 如此不准确的原因是什么?

    我在这里得到了这段代码 var date new Date setTimeout function e var currentDate new Date if currentDate date gt 1000 console log cur
  • C 文件编程 - 使用 POSIX 调用替换文件中的文本

    有没有办法使用 POSIX 调用替换文本文件中的任何关键字 而无需重新创建文件 如果是的话请告诉我该怎么做 提前致谢 如果文本和替换的大小相同 则可以使用模式打开它r 查找 然后写入 如果它们的大小不同 则无法在不重新创建的情况下进行替换
  • 是否可以等待 Device.BeginInvokeOnMainThread 代码完成(继续使用 UI 调用的结果进行后台工作)

    在我的代码中 我有一个名为 ShowMessageBoxAsync 的任务 我想使用此代码向用户显示 并等待 DisplayAlert 并返回结果 像这样 var messageBoxResult wait View ShowMessage
  • System.IO.StreamReader 与 Get-Content 与 System.IO.File

    我一直在比较在Powershell中快速读取相对较大的文本文档的各种方法 这些文件的大小范围为 50kb 200mb 我需要快速解析它们以获取特定的行和 或特定的字符串 读取文件的三个常用工具 我知道 并且没有构建我自己的 C 库 是 Sy