我正在尝试导入包含 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,或一般的脚本编写,旨在使日常任务尽可能简单。这就是为什么性能或内存消耗等因素优先于其他考虑因素(例如简单性和可用性)的原因。
如果您面临着非常高负载和性能密集型的任务,那么脚本工具通常不再是理想的选择。
Native PowerShell 适用于您日常的 1kb csv 文件,但对于这种情况,您可能应该考虑使用 3rd 方库。当然,您仍然可以在 PowerShell 中使用它。毕竟它是 .Net,这就是为什么它是如此出色的工具恕我直言。评论中提到了一些不错的 .Net Csv 解析器。
正如评论中所说,我认为 cmdlet 没有任何硬编码限制。限制仅在于您的硬件和一个简单的事实,即 cmdlet 的设计目的不是为了高效处理大文件,而是为了在日常情况下易于使用。
关于powershell - 对导入 CSV 的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69576296/