PowerShell Core 6.1のパフォーマンスを試す

【連載】

PowerShell Core入門 - 基本コマンドの使い方

【第22回】PowerShell Core 6.1のパフォーマンスを試す

[2018/09/28 12:30]後藤大地 ブックマーク ブックマーク

  • サーバ/ストレージ

サーバ/ストレージ

PowerShell Core 6.1パフォーマンス向上

先日公開されたPowerShell Coreの最新版である「PowerShell Core 6.1」で特に注目される機能改善のひとつがパフォーマンスの向上だ。PowerShell Core 6.1ではいくつかの点でパフォーマンスが大幅に向上している。パフォーマンスの向上はそれだけで新しいバージョンを使う理由になるほど魅力的なものだ。

連載当初はPowerShell Core 6.0.2を使っていた。「What’s New in PowerShell Core 6.1 | Microsoft Docs」にパフォーマンスが向上したことを示すわかりやすいベンチマーク方法が掲載されているので、これをmacOSのPowerShell Core 6.0.2およびmacOS PowerShell Core 6.1で比較した結果を紹介しよう。

パフォーマンス比較用コマンドレット

ここでは上記ページから抜粋および多少の変更を加えた次の4つのコマンドレットを実行する。

Group-Objectベンチ

Measure-Command { 1..100000 | % {Get-Random -Minimum 1 -Maximum 10000} | Group-Object }

Sort-Objectベンチ

Measure-Command { 1..100000 | % {Get-Random -Minimum 1 -Maximum 10000} | Sort-Object }

Import-Csvベンチ

Measure-Command {$a = Import-Csv -Header '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15' KEN_ALL_UTF-8.CSV}

PSObjectベンチ

Measure-Command {Get-Content ./KEN_ALL_UTF-8.JSON | ConvertFrom-Json}

Import-Csvでは「読み仮名データの促音・拗音を小書きで表記しないもの - zip形式 日本郵便」からダウンロードした2018年8月31日更新時点での全国一括 (1,686,673Byte) CSVデータをUTF-8に変換したCSVファイルを使っている。

CSVファイルのサンプル

01101,"060  ","0600000","ホツカイドウ","サツポロシチユウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
01101,"064  ","0640941","ホツカイドウ","サツポロシチユウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0
01101,"060  ","0600041","ホツカイドウ","サツポロシチユウオウク","オオドオリヒガシ","北海道","札幌市中央区","大通東",0,0,1,0,0,0
01101,"060  ","0600042","ホツカイドウ","サツポロシチユウオウク","オオドオリニシ(1-19チヨウメ)","北海道","札幌市中央区","大通西(1〜19丁目)",1,0,1,0,0,0
01101,"064  ","0640820","ホツカイドウ","サツポロシチユウオウク","オオドオリニシ(20-28チヨウメ)","北海道","札幌市中央区","大通西(20〜28丁目)",1,0,1,0,0,0
01101,"060  ","0600031","ホツカイドウ","サツポロシチユウオウク","キタ1ジヨウヒガシ","北海道","札幌市中央区","北一条東",0,0,1,0,0,0
01101,"060  ","0600001","ホツカイドウ","サツポロシチユウオウク","キタ1ジヨウニシ(1-19チヨウメ)","北海道","札幌市中央区","北一条西(1〜19丁目)",1,0,1,0,0,0
01101,"064  ","0640821","ホツカイドウ","サツポロシチユウオウク","キタ1ジヨウニシ(20-28チヨウメ)","北海道","札幌市中央区","北一条西(20〜28丁目)",1,0,1,0,0,0
01101,"060  ","0600032","ホツカイドウ","サツポロシチユウオウク","キタ2ジヨウヒガシ","北海道","札幌市中央区","北二条東",0,0,1,0,0,0
...略...

PSObjectベンチでは上記CSVファイルの一部をJSONデータに変換したものを使っている。

JSONファイルのサンプル

[
  {
    "1": "01101",
    "2": "060",
    "3": "0600000",
    "4": "ホツカイドウ",
    "5": "サツポロシチユウオウク",
    "6": "イカニケイサイガナイバアイ",
    "7": "北海道",
    "8": "札幌市中央区",
    "9": "以下に掲載がない場合",
    "10": 0,
    "11": 0,
    "12": 0,
    "13": 0,
    "14": 0,
    "15": 0
  },
  {
    "1": "01101",
    "2": "064",
    "3": "0640941",
    "4": "ホツカイドウ",
    "5": "サツポロシチユウオウク",
    "6": "アサヒガオカ",
    "7": "北海道",
    "8": "札幌市中央区",
    "9": "旭ケ丘",
    "10": 0,
    "11": 0,
...略...

パフォーマンスの向上はともかく実際に実験してみることが一番だと思う。時間がある方はぜひ追実験を行ってもらえればと思う。

PowerShell Core 6.0.2 vs 6.1性能比較

PowerShell Core 6.0.2 (macOS)およびPowerShell Core 6.1 (macOS)で実行した結果は次のとおりだ。

PowerShell Core 6.0.2 / macOS

Group-Objectベンチ - PowerShell Core 6.0.2 macOS

Sort-Objectベンチ - PowerShell Core 6.0.2 macOS

Import-Csvベンチ - PowerShell Core 6.0.2 macOS

PSObjectベンチ - PowerShell Core 6.0.2 macOS

PowerShell Core 6.1 / macOS

Group-Objectベンチ - PowerShell Core 6.1 macOS

Sort-Objectベンチ - PowerShell Core 6.1 macOS

Import-Csvベンチ - PowerShell Core 6.1 macOS

PSObjectベンチ - PowerShell Core 6.1 macOS

実行結果を表およびグラフにまとめると次のようになる。

macOS pwsh 6.0.2[秒] macOS pwsh 6.1[秒]
Group-Objectベンチ 59.3 17.3
Sort-Objectベンチ 28.7 17.3
Import-Csvベンチ 20.4 5.6
PSObjectベンチ 51.6 12.9

ベンチマーク結果グラフ

見てのとおり、PowerShell Core 6.1はPowerShell Core 6.0.2よりも特定の性能が大幅に向上していることがわかる。

パフォーマンスの向上とMeasure-Command

まず、今回の結果からはPowerShell Core 6.1で特定のパフォーマンスが大幅に向上していることを実感することができる。これはPowerShell 6.1にアップグレードする大きな動機になる。パフォーマンスの高さはそれだけで移行の理由になる。

もうひとつはMeasure-Commandというコマンドレットの使い方だ。PowerShell CoreではMeasure-Commandというコマンドレットを利用することができ、今回示したように簡単に処理時間を計測することができる。自分が組み上げたパイプラインや関数、スクリプトがどの程度の性能を出すのか簡単に調べることができる。PowerShell Coreのスクリプトはとかく遅くなりがちなので、このように計測する術を知っておくことは重要だ。

計測することができれば改善の足掛かりとすることができる。Measure-Commandコマンドレットでいろいろ実行速度を調べてもらえればと思う。

参考資料

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
4054
2
【連載】PowerShell Core入門 - 基本コマンドの使い方 [22] PowerShell Core 6.1のパフォーマンスを試す
連載当初はPowerShell Core 6.0.2を使っていた。「What's New in PowerShell Core 6.1 | Microsoft Docs」にパフォーマンスが向上したことを示すわかりやすいベンチマーク方法が掲載されているので、これをmacOSで6.0.2と6.1を比較した結果を参考までに取り上げよう。
https://news.mynavi.jp/itsearch/files/PS_300-250.jpg
連載当初はPowerShell Core 6.0.2を使っていた。「What's New in PowerShell Core 6.1 | Microsoft Docs」にパフォーマンスが向上したことを示すわかりやすいベンチマーク方法が掲載されているので、これをmacOSで6.0.2と6.1を比較した結果を参考までに取り上げよう。

会員登録(無料)

注目の特集/連載
AI人材に必要なもの
DMM.make AKIBAから生まれたスタートアップたち
はじめてのRPA導入
教えてカナコさん! これならわかるAI入門
RPA入門
PowerShell Core入門
Swagger 3.0 入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
クラウドアンケート

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る