Ускорьте Compare-Object для большого каталога сравнений - PullRequest
0 голосов
/ 18 сентября 2018

В настоящее время я использую Compare-Object для сравнения содержимого двух каталогов.

Каталоги содержат смесь подпапок, файлов PDF и некоторых текстовых файлов.Папки могут содержать более 20 000+ файлов в 50 000+ папок, всего 1-2 ГБ.

Compare-Object завершается примерно через 4 мс30 для сравнения этого размера.Я попытался использовать этот метод хеш-таблицы , чтобы ускорить его, но он дает много ложных срабатываний из-за наличия там дублирующихся имен папок (я думаю?).

Есть ли еще какие-то другиеварианты, чтобы ускорить эту вещь?

Param(
    [Parameter(Mandatory=$true)][string]$dir1,
    [Parameter(Mandatory=$true)][string]$dir2
)

$sw = [Diagnostics.Stopwatch]::StartNew()

# Directories
$sourcedir = Get-ChildItem -Path $dir1 -Recurse
$destinationdir = Get-ChildItem -Path $dir2 -Recurse

# Differences
$differences = Compare-Object -ReferenceObject $sourcedir -DifferenceObject $destinationdir
$differences

$output = $differences | 
          select @{l='File/Folder';e={$_.InputObject}},
              @{l='Indicator';e={$_.SideIndicator}},
              @{l='Path';e={$_.InputObject.FullName}}
$output

$sw.Stop()

"Found " + $differences.Count + " missing objects in " + $sw.Elapsed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...