powershell - 导入 CSV 的限制?
问题描述
我正在尝试导入一个包含 7+ 百万条记录的 ~2.5 GiB .csv 文件。
----- 2021-09-13 06:28 2745868408 thefile.txt
3个多小时后,我停止了以下命令。任务管理器报告内存利用率接近 100%,所有内核的 CPU 利用率约为 90%。
$x = Import-Csv -Path '.\thefile.txt' -Delimiter '|'
是否有任何已知的限制Import-Csv
?必须Get-Content|ForEach-Object
用吗?
PS C:\> $PSVersionTable.PSVersion.ToString()
7.1.4
解决方案
在管道中使用它可能会更幸运,而不是将整个输出分配给变量。
然而...
PowerShell,或一般的脚本,旨在使日常任务尽可能简单。这就是为什么性能或内存消耗等因素的优先级低于其他考虑因素,例如简单性和可用性。
如果您面临非常高负载和性能密集型的任务,那么脚本工具通常不再是理想的选择。
原生 PowerShell 适合您每天 1kb 的 csv 文件,但对于这种情况,您可能应该考虑使用 3rd 方库。当然,您仍然可以在 PowerShell 中使用它。毕竟它是 .Net,这就是为什么它是如此出色的工具恕我直言。评论中提到了一些好的 .Net Csv 解析器。
正如已经评论的那样,我认为 cmdlet 没有任何硬编码限制。限制仅在于您的硬件和一个简单的事实,即 cmdlet 并非旨在高效处理大型文件,而是易于在日常情况下使用。
推荐阅读
- c++ - OpenGL渲染优化
- javascript - 如何重复javascript点击功能
- sql - 访问 - 多个字段上的多个条件 - 仅排除特定匹配
- ruby-on-rails - 如何计算 has_many 的“总计”列:通过
- windows - 是否有图形工具可以方便地查看 git stash 内容?
- python - Python np.stack 中的所有输入数组必须具有相同的形状
- python - 循环大单词列表时的奇怪行为
- vb.net - 如何让 InputBox 上的“取消”按钮退出处理而不是返回空字符串?
- php - Chrome 中的自定义协议未按预期工作
- java - 如何从其他方法Java获取变量