より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

メモリを拡張すれば、ビルド時間は短縮されるか

職場でデスクトップPCを与えてもらい、メモリ増設により8GBから16GBにパワーアップしました。

パワーアップしたことにより、Visual Studioでのビルドが速くなった感じです。

ビルドに時間がかかって困っていた

ビルドに7分かかっていた巨大なソリューションが、2分で処理されるようになりました。

時間のかかるビルドをどう解消するかはチームの課題でした。

IncrediBuildという製品も試してはみましたが、チームのソリューションは解決せず。

解消される仮説は三つあったように思います。

  1. PCのスペックを上げる
  2. プロジェクトが多すぎる。統合する
  3. モジュール化してdll参照にする

が、どれも実証できず、プロジェクトは終わりました。

検証

「PCのスペックを上げる」が一番、現実的な解消方法だったと思います。

職場で検証したいと頃でしたが、自宅にてPararells Desktopの仮想環境を用いてチャレンジしたいと思います。

TeamCityというビルドサーバーがあるので、ビルドサーバーのジョブで計測しようと思います。

f:id:rimever:20190106165138p:plain

細かいログが出力されるので分析しやすいというのが主な理由です。

  • 仮想環境でメモリを調整する
  • 1回だけだとばらつきがわからないので、3回ずつ。
  • systeminfoコマンドを用いて、ビルドログにPC情報を出力しておく(イージーな計測ミスを防ぐため)

f:id:rimever:20190105204840p:plain
Pararells Desktopの設定画面

どれくらいのジョブ?

色々あってGitHubに入れてないので具体的には伝わらないですが、

f:id:rimever:20190106164047p:plain

  • プロジェクトは20程度のソリューション
  • 言語はC#
  • コードは25万行

測定結果

ジョブ自体は4,5分かかるのですが、単位は秒です。

メモリ 1回目 2回目 3回目
4GB 54 58 61
6GB 40 47 46
8GB 45 43 43

f:id:rimever:20190106173017p:plain

8GBメモリがあまり良いところを見せてくれませんでした。

メモリは、「テーブルの広さ」と比喩されたりします。すでに十分な作業領域が確保されているから、大きくしても意味はないということでしょう。

大きなソリューションだったら良いのかもしれませんね。

これは計測用のジョブですが、本番のジョブだとSonarQubeのためのビルドですので3分以上かかります。

それで行きたかったのですが、そしたら4GBだとハングしたため、計測できるようなジョブにしました。

単純にメモリサイズに応じて反比例した時間になるわけではないですが、メモリサイズが大きければ安心して実行できます。

メモリの拡張もハードや費用の制約上で簡単に出来るわけでは無いですし、各プロジェクトで検証しないと参考にならないようです。

まとめ

  • メモリが大きくなれば、ビルド時間は解消される場合もある
  • 効果の程度は各プロジェクトで計測しないとわからない