Visual Studio “15” の起動を高速化

本記事は、マイクロソフト本社の The Visual Studio Blog の記事を抄訳したものです。【元記事】 Faster Visual Studio “15” Startup 2016/10/10

 

John Montgomery の記事でもお伝えしたように、Visual Studio “15” Preview 5 ではパフォーマンスの強化に重点的に取り組みました。Visual Studio "15" のパフォーマンス強化について、この記事を含め 5 回のシリーズ記事としてお届けしたいと思います。

初回となるこの記事では、最新リリースに実装された起動エクスペリエンスの中でも特に以下の点についてご説明します。

  • 新しいパフォーマンス センターを使用して、使用中の拡張機能やツール ウィンドウが、起動、ソリューションの読み込み、コード編集の操作に影響を及ぼしていないかを確認する方法。また、その方法を最適化する方法
  • 拡張機能の読み込みのオンデマンド化や最適化、キャッシュの初期化を後回しにすることで起動時に読み込まれる拡張機能が減少し、起動時間が短縮することについて

Visual Studio のユーザー数は年々大きく増加し、Visual Studio で使用されるパートナー テクノロジの種類も多様化しています。機能や拡張機能は起動時に自動的に読み込まれるため、残念ながらそのうちの一部は Visual Studio の起動時間が大幅に長くなる原因となっています。

次に示すように、Visual Studio の起動時間は、起動時の拡張機能の読み込みによって 50% 以上遅くなることがあります。

Visual Studio の起動時に何が起きているのか

Visual Studio の起動方法には次の 3 つの種類があります。

  1. 初回起動: Visual Studio のセットアップが完了した後の最初の起動です。Visual Studio 環境ではさまざまなキャッシュや事前構築されたテーブルが使用されているため、初回起動時は通常の起動よりもかなり時間がかかります。
  2. 通常起動: 初回起動以降の Visual Studio の起動は「通常起動」と呼ばれます。通常起動では、デバッグ インスタンスやコマンド ラインの引数を使用したインスタンス、過去にインストールされた拡張機能や更新のインスタンスは起動されません。Visual Studio を起動する場合の 80% がこの通常起動です。
  3. 構成変更: 拡張機能や更新がインストールされた後の起動です。

起動の種類を分類することで、考えられる速度低下の根本的な原因を特定しやすくなり、最適化する方法の調査も容易になります。

初回起動の改善

Visual Studio 2015 では、インストールされているコンポーネントのスキャン、構成内容の収集、既定の設定の初期化、ユーザーのサインイン情報の取得、Managed Extensibility Framework (MEF) や拡張機能マネージャー、ツールボックス、フォントや色などのキャッシュの初期化を初回起動時に実行していました。

Visual Studio “15” では、各処理の中から後回しにできるものや最適化できるものを選別しました。

  • Visual Studio 2015 で試験的にツールボックスの初期化を後回しにしたところ、起動時間の短縮が見られたため、Visual Studio "15" ではこの変更がそのまま採用されました。
  • フォントや色など、一部のキャッシュの初期化が起動時に実行されなくなりました。また、キャッシュ構成を大幅に改良して一部のキャッシュの初期化を 2 回目以降の起動時に実行するようにして、初回起動時の起動時間を短縮しました。
  • MEF と拡張機能マネージャー サービスを非同期化して、サインイン実行時にこれらのキャッシュの初期化を並列実行できるようにしました。

このような変更が実装されたことにより、Visual Studio “15” の初回起動は Visual Studio 2015 と比べて 3 倍程度高速化されました。次の表は、テレメトリで得られたごく初期のデータです。

時間 Visual Studio 2015 Visual Studio “15”
初回起動時間 (80 パーセンタイル値) 215.5 秒 80.3 秒

通常起動の改善

Visual Studio の通常起動時には、コア サービスの初期化は不可欠です。このため、コア サービスの初期化に要する時間が長くならないようにこれらのサービスを常に監視しています。起動時間が長くなる原因は、コア サービスの初期化の他にも大きく 2 つあります。1 つは起動時に自動的に拡張機能が読み込まれること、もう 1 つは前回のインスタンスでウィンドウ レイアウトに存在していたツール ウィンドウが読み込まれることです。テレメトリ データを見ると、マイクロソフトの拡張機能とサードパーティの拡張機能の両方が自動的に読み込まれることで Visual Studio の起動時間が大幅に長くなっていることがわかります。

前述のように、Visual Studio “15” では起動時の拡張機能の自動読み込みを削減して後で読み込むように変更し、ユーザー エクスペリエンスへの影響を低減することに重点的に取り組みました。この作業の一環として、以下の機能を実装しました。

  • Visual Studio パッケージの非同期読み込みをサポート
  • パッケージの自動読み込みとコマンドの可視性を制御するメタデータ ルールを拡張
  • Visual Studio のコア サービスの非同期クエリをサポート

Visual Studio “15” では、まず Xamarin と Python のツールの読み込みをオンデマンド化しました。これらの拡張機能がインストールされている場合、起動時間が大幅に短縮されていることを体感していただけます。

起動時に IDE で表示されるツール ウィンドウも起動時間に影響を与えています。これらのツール ウィンドウは前回のインスタンスから引き継がれていて、初期化される機能のサイズによって起動時間が長くなる原因となっており、一部の機能は特に大きな影響を与えています。マイクロソフトでは、テレメトリ データを基にこのようなツール ウィンドウによる起動の低速化を改善することに取り組んでいます。また、[Manage Visual Studio Performance] ダイアログで、既定で表示されるツール ウィンドウの設定を変更できます。このダイアログについては、次のセクションで詳しく説明します。

拡張機能とツール ウィンドウのパフォーマンスの監視

Visual Studio “15” では、起動時に自動的に読み込まれる機能が最小限に抑えられると同時に、起動時、およびソリューションの読み込み時や編集時のパフォーマンスに影響を与えている拡張機能やツール ウィンドウを把握するための機能が追加されています。つまり、この機能では Visual Studio の起動時の自動読み込み処理を監視することができます。

Visual Studio の起動時には、読み込みに時間がかかる拡張機能とその拡張機能が起動時間に大きな影響を与えているというメッセージが 1 度だけ通知されます。

[Help] の [Manage Visual Studio Performance] ダイアログを開くと、いつでも Visual Studio の起動やソリューションの読み込み、入力時のパフォーマンスに影響を与えている拡張機能やツール ウィンドウを確認できます。この [Manage Visual Studio Performance] ダイアログでは拡張機能を無効化することができます。

拡張機能と同様にツール ウィンドウによる影響も同じダイアログで確認できます。ツール ウィンドウが Visual Studio の起動を大幅に低速化させる原因となっている場合にも通知が表示されます。既定で使用するツール ウィンドウの設定を変更する場合は、以下の 3 つのオプションから選択できます。

  • [Use default behavior]: 現在の設定から変更されません。つまり、このオプションを選択すると、起動時間は短縮されません。
  • [Do not show window at startup]: 現在のインスタンスのツール ウィンドウが次回に引き継がれなくなります。ツール ウィンドウは後でメニューから開くことができます。
  • [Auto hide window at startup]: 起動時にツール ウィンドウを表示する設定になっている場合、このオプションを選択するとグループが折りたたまれ、ツール ウィンドウが初期化されません。筆者はこのオプションを使用しています。

これらのオプションは、[Manage Visual Studio Performance] ダイアログで [Use default behavior] を選択するといつでも元に戻すことができます。

ご協力のお願い

今回の記事では起動時のパフォーマンスについてご説明しました。ソリューションの読み込みについても大きな投資を行ったため、次回の記事で Will Buik がご説明する予定です。これらの変更を実施した結果、Windows エクスプローラーからソリューションを選択したときの Visual Studio の起動時間が短縮されました。

Visual Studio の改良をさらに進めるために、以下の方法で皆様のご協力をお願いいたします。

  • マイクロソフトでは、プレリリース版を含むすべてのリリースで皆様の使用状況データをテレメトリで収集しています。ぜひ Visual Studio "15" Preview 5 をダウンロードしてご利用ください。
  • 拡張機能の開発者の方は、今後数週間かけて投稿する拡張機能の分析方法に関する記事をお待ちください。起動時やソリューションを開くときに自動的に拡張機能が読み込まれると、Visual Studio のパフォーマンスに悪影響が出る場合があります。記事では、起動時に自動的に読み込む必要をなくしたり、自動読み込みによる影響を抑える Visual Studio "15" の新機能について説明する予定です。また、自動読み込みが必要な拡張機能について、起動時にどの程度影響があるかを計測する方法も説明します。

今後とも Visual Studio をよろしくお願いいたします。

Selma Ikiz

Selma Ikiz (Visual Studio IDE 担当プログラム マネージャー)Selma Ikiz は、2009 年にマイクロソフトに入社して以来、開発テクノロジを担当しています。主に開発者の皆様に高いパフォーマンスと安定性を備えた IDE をお届けすることに従事しており、現在はテレメトリ データに基づいて Visual Studio の新しいインストーラーを改良することに取り組んでいます。