导入csv文件的限制?



我正在尝试导入一个包含700多万条记录的~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文件来说很好,但是对于这种情况,你可能应该考虑使用第三方库。当然,你仍然可以在PowerShell中使用它。毕竟它是。net,这就是为什么它是一个如此伟大的工具。评论中提到了一些不错的。net Csv解析器。

如前所述,我不认为cmlet有任何硬编码限制。限制只在于您的硬件和一个简单的事实,即cmdlet不是为高性能地处理大文件而设计的,而是为了在日常情况下易于使用。

完全同意@marsze

只是一个你可以做的测试:如果你只是想在.csv文件中寻找具体的记录,你应该避免尝试将它加载到内存中,而是将它管道到一个过滤器中。我不使用import-csv这个方法,但是使用get-content,它允许我在2Gb的日志文件中找到具有正确性能的特定记录。

相关内容

  • 没有找到相关文章

最新更新