Мне нужно циклически проходить по файлу с ~ 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
может быть еще быстрее - к сожалению, я не знаюкак начать с этого.