我正在嘗試匯入包含 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
uj5u.com熱心網友回復:
在管道中使用它可能會更幸運,而不是將整個輸出分配給變數。
然而...
PowerShell,或一般的腳本撰寫,旨在使日常任務盡可能簡單。這就是為什么性能或記憶體消耗等因素優先于其他考慮因素(例如簡單性和可用性)的原因。
如果您面臨著非常高負載和性能密集型的任務,那么腳本工具通常不再是理想的選擇。
Native PowerShell 適用于您日常的 1kb csv 檔案,但對于這種情況,您可能應該考慮使用 3rd 方庫。當然,您仍然可以在 PowerShell 中使用它。畢竟它是 .Net,這就是為什么它是如此出色的工具恕我直言。
正如評論中所說,我認為 cmdlet 沒有任何硬編碼限制。限制僅在于您的硬體和一個簡單的事實,即 cmdlet 的設計目的不是為了高效處理大檔案,而是為了在日常情況下易于使用。
uj5u.com熱心網友回復:
完全同意@marsze
只是一個你可以做的測驗:如果你只是想在 .csv 檔案中查找特定記錄,你應該避免嘗試將它加載到記憶體中,而是將它輸送到過濾器中。我不將這種方法與 import-csv 一起使用,而是使用 get-content,它允許我在 2Gb 日志檔案中找到具有正確性能的特定記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316402.html
