Powershell – средства оптимизации скрипта


При обработке большого объёма информации важна производительность скрипта Powershell. Даже небольшие изменения в скрипте (см. Powershell – превратности производительности) способны уменьшить время выполнения скрипа в несколько раз. Для анализа небольшого по размеру скрипта можно с успехом использовать стандартный командлет Measure-Command. Но стоит скрипту разрастись, трудоёмкость использования этого командлета для поиска узких мест начинает расти в прогрессии: для оптимизации объёмного скрипта, состоящего из сотен строк, этот метод перестаёт работать.

Встаёт вопрос о профайлере (powershell performance profiler). И тут оказывается, что штатного профайлера Powershell не предлагает. В предварительной версии Powershell 5.0 его тоже нет (Если только в финальной версии внезапно появится, что маловероятно).

Поэтому я решил поискать в недрах Интернета возможные решения и альтернативы. И вот что получилось.

  1. Метод

    Самый практичный вариант для оценки производительности большого скрипта в целом.

    Используем его для оценки времени выполнения каждой строки (фактически скрипт-блока) и находим узкие места.

    После этого можно приступить к оптимизации конкретной строки (компонентов внутри этого скрипт-блока) для чего использовать ниже описанный «метод 2» в составе оптимизируемого скрипта или вынося оптимизируемый блок в отдельный файл и моделируя ситуацию.

    Measuring PowerShell scripts http://www.powershellmagazine.com/2013/05/13/measuring-powershell-scripts/

    Script Line Profiler Sample https://code.msdn.microsoft.com/Script-Line-Profiler-Sample-80380291/sourcecode?fileId=70887&pathId=217486489

  2. Метод

    Практичный способ выборочной оценки конструкций (скрипт-блоков) внутри рабочего скрипта. Хорошо дополняет «метод 1», но может применяться самостоятельно для небольших скриптов.

    Advanced Script Profiling http://www.powershellmagazine.com/2011/11/15/advanced-script-profiling/

Далее перечислены достаточно специфические методы

  1. Метод

    Типичный вариант оценки скрипт-блока с помощью обёртки для Measure-Command. Этот способ пригоден для оценки только отдельных небольших конструкций.

    PowerShell benchmarking module built around Measure-Command http://www.powershelladmin.com/wiki/PowerShell_benchmarking_module_built_around_Measure-Command

  2. Метод

    Ещё один типичный вариант оценки скрипт-блока с помощью .Net класса Diagnostics.Stopwatch. Этот способ также пригоден для оценки только отдельных небольших конструкций.

    Benchmarking scripts and programs with PowerShell http://zduck.com/2013/benchmarking-with-Powershell/

  3. Метод

    Очень оригинальный способ с использованием отладчика CDB. Это не пригодно для анализа скрипта Powershell как такового, но может использоваться для анализа любой .Net программы. Метод помогает понять, например, почему тормозит то или иное обращение к системе на достаточно глубоком уровне.

    A Poor Man’s Profiler with PowerShell and CDB http://www.leeholmes.com/blog/2012/08/23/a-poor-mans-profiler-with-powershell-and-cdb/

  4. Метод

    Своеобразный анализ быстродействия скрипта на основе анализа файла трассировки. Трассировка в Powershell не выводит временных меток, поэтому анализ делается в параллельном процессе в реальном времени на основе временных срезов (samples). Скорее всего какую-то пользу этот метод может дать для скрипта, который выполняется достаточно долго и насыщен циклами. В начало анализируемого скрипта рекомендую поставить задержку (Sleep или ReadKey), чтобы запустить параллельный процесс со скриптом-анализатором. Хотя лучше скрипт анализа доработать (это просто сделать), чтобы анализ автоматически запускался при появлении файла транскрипта.

    Get-ScriptPerformanceProfile.ps1 https://github.com/yoshiao/Azure_Parallel_Samples/blob/master/PowerShell_tools/Get-ScriptPerformanceProfile.ps1

  5. Метод

    Интересный вариант, но похоже не развивается, хотя возможно работает (не пробовал, т.к. нужно компилировать проект)

    PoSHProfiler https://poshprofiler.codeplex.com/

Позже планирую написать небольшой обзор о том, что заложено внутри Powershell для осуществления анализа скрипта.

Реклама

Один ответ

  1. […] предыдущего опыта по оптимизации скриптов на Powershell (Powershell – средства оптимизации скрипта) получился такой скрипт решающий нашу […]

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: