在导入的csv中进行Powershell缓慢搜索

问题描述 投票:1回答:1

我正在使用csv文件加载类似表格的对象,然后在其中搜索现有项目。仅使用2000个项目,在I5 CPU上运行的计算机就需要2秒钟使用where在2列上执行搜索。想知道我在做什么错:

$uploadedRecordings = import-csv -path $ArchiveUploadedFilesInGoogleDrive
...[some other code]
if($uploadedRecordings | where { $_.Name -eq $filename -and $_.Size -eq $item.file_size}){
               Write-Host "[Already downloaded] Skipping....
}

$item(样本):

id              : f5b693
meeting_id      : uT4dfhghd==
recording_start : 2020-03-25T16:01:31Z
recording_end   : 2020-03-25T18:14:36Z
file_type       : M4A
file_size       : 54332420
play_url        : https://myurl
download_url    : https://otherurl
status          : completed
recording_type  : audio_only

$filename = "Meeting - 2020-04-20 -- 09.29.59.mp4"

powershell object search
1个回答
0
投票

PowerShell提供了强大的功能,远远超出了传统Shell所提供的功能,但它没有一件事:速度恶魔。

PowerShell的面向对象的管道是一个很棒的工具,但是它可能很慢。

This answer总结了性能建议;在这种情况下,您可以通过避免使用.Where() array method的流水线来加快命令速度:

.Where()

[还请注意,我是如何交换if ($uploadedRecordings.Where({ $_.Size -eq $item.file_size -and $_.Name -eq $filename }) { Write-Host "[Already downloaded] Skipping..." } 操作数的,以便首先比较文件大小,以利用短路的优势;毕竟,大小完全相同的文件比具有相同名称的文件少见。

© www.soinside.com 2019 - 2024. All rights reserved.