Visual Studio “15” で C++ ソリューションの読み込みとビルドを高速化

本記事は、マイクロソフト本社の The Visual Studio Blog の記事を抄訳したものです。【元記事】 Faster C++ solution load and build performance with Visual Studio “15” 2016/10/13

 

Visual Studio "15" では、C++ 開発者の皆様の生産性を大きく向上させることを目指しています。この目標に向けて、先日リリースされた Preview 5 ビルドには多数の改良点が実装されました。この記事ではその主な機能について説明します。

C++ ソリューションの読み込みを高速化

C++ プロジェクトに向けて、「迅速なプロジェクトの読み込み」という試験的な機能が導入されました。C++ プロジェクトを初めて開いたときの読み込み時間を短縮するもので、2 回目以降はさらに短くなります。この試験機能を使用する場合は、下図のように [Tools]、[Options] の順に選択してから [Enable Faster Project Load] を [True] に設定します。

次の簡単なデモでは、1968 個のプロジェクトを含む大規模な Chromium Visual Studio ソリューションを用いて、読み込み時間が短縮されることを証明しています。詳細については、C++ ソリューションの読み込みの高速化に関するブログ記事 (英語) を参照してください。

これとは別に、Visual Studio ではソリューションの読み込みを高速化する「ライトウェイト ソリューション ロード」機能の試験も行っています。この 2 つの機能にはまったく異なる手法が使用されています。詳細についてはこちらの記事を参照してください。
ライトウェイト ソリューション ロード機能は、すべてのプロジェクトをまとめて読み込むのではなく、ソリューション エクスプローラーでプロジェクトが明示的に拡張されたときに該当プロジェクトのみを読み込むというものです。C++ チームは迅速なプロジェクトの読み込み機能に集中的に取り組んでいるため、現時点ではライトウェイト ソリューション ロードのサポートは最小限にとどまっています。RC 版 Visual Studio 15 では、ライトウェイト ソリューション ロードと迅速なプロジェクトの読み込み機能の両方がサポートされる予定で、この 2 つを組み合わせて優れたエクスペリエンスが実現されます。

/debug:fastlink でビルド サイクルを短縮

開発者ビルドで /debug:fastlink エクスペリエンスとの統合によりリンクが高速化され、ビルド時間が短縮されました。リンカーの改良により、アプリケーションのビルド時間が 2 分の 1 から 4 分の 1 に短縮されます。

次の図では、C++ の主要なソースに対するリンク時間が /debug:fastlink によりどの程度短縮されたかを示しています。/debug:fastlink の詳細や Visual Studio との統合については、先日公開された C++ のビルド サイクル短縮に関するブログ記事 (英語) を参照してください。

メモリ不足によるデバッグ中のクラッシュが減少

VS “15” Preview 5 では、シンボル データの事前取得により向上したパフォーマンスを維持しつつ、シンボル情報が使用するメモリの量を削減しました。今回のバージョンでは、変数や式の評価および表示に関連するモジュールのみが事前取得されるようになりました。その結果、VS 2015 ではメモリ不足でクラッシュしていた Unreal Engine プロセスのデバッグを VS “15” Preview 5 で 行ったところ、仮想メモリの使用量は 3GB 以下、プライベート ワーキング セットのサイズは 1.8GB に抑えられ、クラッシュすることはなくなりました。明らかに改善されてはいますが、満足な結果とは言えません。マイクロソフトは今後の VS “15” 開発でも、ネイティブなデバッグ作業シナリオでのメモリ使用量の削減をさらに進める予定です。

まとめ

マイクロソフトでは、この機能をお試しになった皆様のエクスペリエンスを開発に活かすため、フィードバックをお待ちしています。C++ のコード ベースの活用におけるこの機能の感想をぜひお聞かせください。
問題点がありましたら、インストーラーまたは Visual Studio IDE 本体の [Report a Problem] オプションからご報告をお願いします。また、クエリやご意見を担当チームにメールで直接お送りいただけます。新機能のご提案は UserVoice (英語) までお寄せください。

Jim Springfield (Visual C++ チーム担当主任アーキテクト)Jim Springfield は熱心な最先端の C++ 開発者で、コンパイラのフロントエンド、言語サービス エンジン、ライブラリなどの再設計に積極的に取り組んでいます。また、人気の C++ ライブラリの MFC および ATL の制作者で、直近では今後導入が予定されているエディターの Visual Studio Code の初期クロス プラットフォーム C++ 言語サービス エクスペリエンスを担当しています。
Ankit Asthana (Visual C++ チーム担当シニア プログラム マネージャー)Ankit Asthana は主にクロス プラットフォームのモバイル開発とネイティブ コード生成ツールを担当しています。また、コンパイラ、分散コンピューティング、サーバー側の開発について豊富な知識を持っています。過去には IBM と Oracle Canada での開発経験を持ち、Java 7 (HotSpot) の最適化や通信機器を担当していました。2008 年には C++ に関する著書『C++ for Beginners to Masters』を出版し、数千部の売り上げを記録しています。