読者です 読者をやめる 読者になる 読者になる

tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

FormatMarkdown に見るPowerShellで避けたほうがいい配列処理

PowerShell

PowerShell をやってて、だれもが一度は作る Format-MarkDown。

自分で作ったのはもってたのですが、人の作ったのを見る機会があったのでソースをみていました。

www.powershellgallery.com

このソース、配列を扱うにあたって PowerShell でやらないほうがいいことをしてるので改善する流れをみてみましょう。

目次

改善してみる

配列は+=からListへ

すでに書いたことなのですが、これを適用するだけです。

tech.guitarrapc.com

つまり、配列に対して、+= をするのはパフォーマンス影響が大きいということです。

数十程度ならいいのですが、数百、数千になるに従い影響は顕著に表れます。

Get-Member を繰り返さない

毎回毎回 Process で Get-Member を繰り返すのはやめます。初回に一発とればいいのです。

とはいえ、begin{} で、パイプラインからの入力は取れないので process{} のしょっぱなでとります。

改善内容

オリジナルは、Format-Markdown.Original.ps1 です。 改善した方が、Format-Markdown.New.ps1 です。

gist.github.com

改善結果

66 Propery * 162 Process = 10692要素での影響です。

安定のMeasure-Command で計測してみましょう。

Measure-Command {ps | Format-Markdown}

1秒あまり高速化できています。

# 改善前
TotalSeconds      : 5.8757014

# 改善後
TotalSeconds      : 4.2137417

とはいえおそいですね。この辺はつらいものがあります。

まとめ

こういうの知らない人まだまだ多いにゃ。

作者の @pcgeek86 は、GitHub にこのスクリプトおいてないんですよねー。

github.com

なのでPR とかは送ってないです(