我々が前回、パフォーマンスについて 議論した 時、Microsoftの Larry Sullivan氏は、 PerfWatsonの重要性を強調した。これは、レビュー可能なパフォーマンスデータを生成し、Visual Studioチームが改善できるようにしてくれる。氏は、今回彼のチームがこのデータで何ができたか、そしてVS11になされた特別な変更について明らかにしてくれる。
仮想メモリー
氏は、Visual Studioのメモリー必要量へのチームのアプローチについて、まず説明した。プログラムをもっとメモリーが要るネイティブな64ビットアプリケーションに変換するのではなく、彼らは32ビットプロセスとして、既に使用できるメモリーでもっと効率的にすることに注力することを決めた。こうして、チームはVSで最もメモリーを消費する、DLLから始めた。800以上のDLLで、非効率性と過剰なメモリー使用量について調べることになった。/p>
次に大きなメモリーを消費するのは、VS中の様々なコンポーネントによって使われるネイティブ ヒープだった。メモリー使用量を減らす他に、保存努力も発見された。「多くの機会とフィーチャチームが修正すべき”直ぐに取りかかれる”バグを明らかにすることができた」
最終的に、「Visual Studio内でWebソリューションをロードする時に、ロードされるDLLが約300少なくなり、およそ400MBのVMが節約されることになった。」他のソリューションタイプについてのパフォーマンスアップは直接提供されたかったが、氏はフォローアップのコメントで以下のように返答した。
データを持っている人を捕まえることができました。ベータでは、VMはC++に対して実質的に変化はないが、ベータ後に改善するはずです。ベータで、およそ35MBのワーキングセットの改善があり、これはおよそ12%の改善です。我々は引き続きC++開発者のために、Visual Studio 11の改善に努めます。
改善されたソリューションロード時間
ソリューションロード時間は全VSユーザーに影響する。チームは非同期ソリューションローディングを 導入して、このことに対処した。 Microsoftの Visual Studio Pro Teamに属する Nathan Halstead氏は、プロジェクトのロードを2つのフェーズ、モーダルローディングとバックグラウンドローディングで実行するこのアプリケーションについて情報を提供してくれた。
モーダルローディングフェーズでは、VS11は前回のセッションで開いたファイルを基に、ユーザーが必要とする、と予想されるプロジェクトをロードする。もし開かれたプロジェクトが他のプロジェクトに依存している場合、それらもこのフェーズにロードするようにスケージュールする。重要でないプロジェクトは、バックグラウンドフェーズでロードするようにスケージュールする。
バックグラウンドフェーズは、UIスレッドをブロックすることはなく、残りのロードタスクをバックグラウンド処理で始める。もしユーザーのアクションがアンロードされているプロジェクトを必要とすれば、VSはバックグラウンドのローディングを続けないで、そのローディングプロセスを最前列に持ってくる。
コンパイル-エディット-デバッグ ループ
最後に Visual Studio Ultimate Teamの Tim Wagner氏が、通常の「 コンパイル-エディット-デバッグ」サイクルに成された変更について説明してくれた。氏のコメントによると、//BUILD でリリースされたVSは、機能的に完全を意図しており、一方パフォーマンスは、VS 11 Betaリリースで改善することを目標にしている。不幸にして、氏のコメントは Windows 8上のMetroアプリ開発のパフォーマンスにフォーカスしており、それはVS11特有の機能で、VSの以前のバージョンと比較することはできない。
Microsoftのリードプログラムマネージャーである、Ayman Shoukry氏は、C++パフォーマンスに関してヒントをくれ、次のように言っている。
VC++コンパイラとリンカー側には、いくつも改善があり、特にDev11用コンパイラをマルチスレッド化しました。その結果、大きな内部のMS製品をビルドする際に、大幅にコンパイル時間が改善されました。Dev11 VC++のビルド時間の改善については、もっと詳しくブログでフォローします。
このような改善は未だ明らかにされていないが、Wagner 氏は次のように約束のフォローをしてくれた。
ここに改善を報告しているからと言って、我々がベータのパフォーマンスで満足しているわけではありません。我々はDev11でできる限り、多くのパフォーマンス改善を進めていくつもりです。