@Drovosek01

Почему скрипт Powershell работает в 3 раза дольше если переменную вынести за пределы функции?

Есть скрипт для замены байт в файл по передаваемым hex-шаблонам в качестве аргументов.
https://gist.github.com/Drovosek01/9d47068365ea0bc...
(Тот что в комментариях "Update 1")

Я начал в нем рефакторить функцию "SearchAndReplace-HexPatternInBinaryFile".
https://gist.github.com/Drovosek01/9d47068365ea0bc...
(В комментариях "Update 2")
При выносе объявления переменной
[byte[]]$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
во внешнюю часть кода - скрипт работает в 3 раза дольше.
Проверял на файле размером 121 МБ

Если массив $fileBytes не объявлять во внешней части, а вернуть из самой функции и потом передать в другую функцию - ситуация повторяется.

Почему так?
Как это исправить?
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov Куратор тега PowerShell
Видимо связано с особенностями использования глобальных переменных

Я б от них избавился

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, а до. хотя по сравнению с поиском оно и маленькое :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 18:08
1000 руб./за проект
24 нояб. 2024, в 17:52
3000 руб./за проект
24 нояб. 2024, в 16:14
1000 руб./за проект