我必须循环浏览每天有大约50.000行的文件,以生成报告并将这些数据记录导入我们的数据库中
由于我必须执行一些-replace
-语句和内容,因此我目前通过foreach
在每一行中循环。此方法在约16分钟后结束:
$csv_file = ".\testfile.csv"
$csv_import = Import-Csv $csv_file -Delimiter ";" -Encoding "default"
function Import-CsvVersion1 {
$results = @()
foreach ($data in $csv_import) {
$properties = [ordered]@{
id = $data."id"
name = $data."name"
description = $data."description"
netcost = $data."netcost"
rrp = $data."rrp"
}
$results += New-Object PSObject -Property $properties
}
# Export $results into final csv
}
我发现了另一种方法,其中foreach
的结果将直接分配给$results
变量。这种方法在约8分钟后完成(因此只需要一半的时间):
$csv_file = ".\testfile.csv"
$csv_import = Import-Csv $csv_file -Delimiter ";" -Encoding "default"
function Import-CsvVersion2 {
$results = foreach ($data in $csv_import) {
[PSCustomObject]@{
id = $data."id"
name = $data."name"
description = $data."description"
netcost = $data."netcost"
rrp = $data."rrp"
}
}
# Export $results into final csv
}
我读过某个地方,通过ForEach-Object
的循环可能甚至更快-不幸的是,我不知道如何开始。
答案 0 :(得分:0)
由于@GuentherSchmitz,我能够创建第三个测试函数。在下一个测试中,我使用了一个带有〜2.000行的CSV文件,结果如下:
Import-CsvVersion1
-> 4分钟24秒Import-CsvVersion2
-> 0分钟18秒Import-CsvVersion3
-> 1分钟20秒再次感谢您的帮助:-)
P.S:我还摆脱了以前的Write-Progress
,它显然使脚本运行速度降低了约80%