Видимо связано с особенностями использования глобальных переменных
Я б от них избавился
function SearchAndReplace-HexPatternInBinaryFile {
[OutputType([int[]])]
param (
[Parameter(Mandatory)]
[string]$filePath,
[string[]]$patterns,
[byte[]]$newFileBytes
)
......
.....
$replacedPatternsIndexes = SearchAndReplace-HexPatternInBinaryFile -filePath $filePathArg -patterns $patterns -newFileBytes $newFileBytes
Сразу получается то же самое время
Но вообще странно считать время через Stopwatch без учёта чтения файла, который почему-то читается не после MAIN, а до. хотя по сравнению с поиском оно и маленькое :)