首页 > 解决方案 > 导入 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

标签: powershellcsv

解决方案


在管道中使用它可能会更幸运,而不是将整个输出分配给变量。

然而...

PowerShell,或一般的脚本,旨在使日常任务尽可能简单。这就是为什么性能或内存消耗等因素的优先级低于其他考虑因素,例如简单性和可用性。

如果您面临非常高负载和性能密集型的任务,那么脚本工具通常不再是理想的选择。

原生 PowerShell 适合您每天 1kb 的 csv 文件,但对于这种情况,您可能应该考虑使用 3rd 方库。当然,您仍然可以在 PowerShell 中使用它。毕竟它是 .Net,这就是为什么它是如此出色的工具恕我直言。评论中提到了一些好的 .Net Csv 解析器。

正如已经评论的那样,我认为 cmdlet 没有任何硬编码限制。限制仅在于您的硬件和一个简单的事实,即 cmdlet 并非旨在高效处理大型文件,而是易于在日常情况下使用。


推荐阅读