我正在使用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提供了强大的功能,远远超出了传统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..."
}
操作数的,以便首先比较文件大小,以利用短路的优势;毕竟,大小完全相同的文件比具有相同名称的文件少见。