以下の内容はhttps://tech.guitarrapc.com/entry/2015/11/29/183448より取得しました。


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

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

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

https://www.powershellgallery.com/packages/FormatMarkdown/

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

改善してみる

配列は+=からList

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

https://tech.guitarrapc.com/entry/2013/09/22/100203

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

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

Get-Member を繰り返さない

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

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

改善内容

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

https://gist.github.com/guitarrapc/1806e2417e94a43116ab

改善結果

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

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

Measure-Command {ps | Format-Markdown}

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

# 改善前
TotalSeconds      : 5.8757014

# 改善後
TotalSeconds      : 4.2137417

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

まとめ

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

https://github.com/pcgeek86

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




以上の内容はhttps://tech.guitarrapc.com/entry/2015/11/29/183448より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14